# CutShort Scraper (`parsebird/cutshort-jobs-scraper`) Actor

Scrape CutShort.io tech and startup jobs — titles, companies, salaries, skills, experience, descriptions, recruiter details, tech stacks, funding stage. Search by skill or paste URLs. Output modes: full, summary, urls\_only. Export JSON, CSV, Excel. No login needed.

- **URL**: https://apify.com/parsebird/cutshort-jobs-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### CutShort Scraper — India Tech & Startup Jobs, Salaries & Skills

Scrape [CutShort.io](https://cutshort.io/) tech and startup job listings — titles, companies, salaries, skills, experience, descriptions, recruiter details, funding stage, and LinkedIn profiles. Search by skill or paste CutShort URLs. Three output modes: full, summary, urls\_only. Export as JSON, CSV, or Excel. No login needed.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Extract structured job data from CutShort.io — India's curated tech hiring platform. Search by skill terms like python, react, or devops. Get 35+ fields per job including salary ranges, funding stage, recruiter contacts, company LinkedIn, and USD salary estimates. $1.50 per 1,000 jobs.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/cutshort-jobs-scraper — scrapes CutShort.io tech and startup job listings from India's curated hiring platform. Pricing: $0.0015/result ($1.50/1000). Call via ApifyClient: client.actor("parsebird/cutshort-jobs-scraper").call(run_input={"skills": ["python", "react"], "maxItems": 25}). Key inputs: skills (array of strings — skill terms like "python", "react", "devops", "nodejs", "java"), startUrls (array of objects with "url" key — CutShort job or search URLs), maxItems (integer, default 50 — max jobs to save), outputMode (string: "full"|"summary"|"urls_only", default "full"). Output fields (full mode): jobId, jobSlug, url, applyUrl, title, jobType, descriptionText, descriptionHtml, companyName, companyId, companySlug, companyUrl, companyLogo, companyWebsite, companyLinkedin, companyFounded, companySize, fundingStage, location, locations, remote, remoteType, salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryRawText, salaryMinUsdEstimate, salaryMaxUsdEstimate, experienceRange, experienceMin, experienceMax, skills, recruiterName, recruiterPhoto, matchedSkill, matchedInputs, sourceUrl, sourcePage, sourcePosition, dedupeKey, scrapedAt. API docs: https://docs.apify.com/api/v2 Token: https://console.apify.com/settings/integrations
```

### What is CutShort Scraper?

**CutShort Scraper** is an [Apify Actor](https://apify.com/actors) that extracts job listings from [CutShort.io](https://cutshort.io/) — India's curated tech hiring platform focused on startups and tech companies. Unlike mass job boards, CutShort vets companies before listing, resulting in higher-quality job data with better salary transparency.

Think of it as a **CutShort API alternative** — CutShort does not offer a public data API, but this scraper delivers structured job data at scale. Each listing includes salary ranges, funding stage, company size, recruiter details, and LinkedIn profiles — data points that other job boards rarely expose.

- 🔍 **Search by skill** — Pass skill terms like `python`, `react`, `devops`, `nodejs`, or `java` to find matching jobs
- 🔗 **Direct URLs** — Paste any CutShort job URL or search URL to extract specific listings
- 📊 **Three output modes** — Full (35+ fields), Summary (key fields), or URLs only
- 🏢 **Rich company data** — Funding stage, company size, LinkedIn, website, founded year
- 💰 **Salary transparency** — Numeric salary ranges in INR with USD estimates
- 🔄 **Automatic deduplication** — Jobs appearing across multiple skills are saved only once

### What data can you extract from CutShort?

| Field | Description |
|-------|-------------|
| `jobId` | Unique CutShort job identifier |
| `title` | Job title (e.g., "Backend Engineer - Python", "Sr. Engineering Manager") |
| `companyName` | Hiring company name |
| `location` / `locations` | Job location(s) (e.g., "Bengaluru", "Remote") |
| `remote` / `remoteType` | Whether the role is remote and the remote type |
| `salaryMin` / `salaryMax` | Salary range in INR (annual) when published |
| `salaryCurrency` / `salaryPeriod` | Currency (INR) and period (year) |
| `salaryRawText` | Original salary text (e.g., "₹12L - ₹25L / yr") |
| `salaryMinUsdEstimate` / `salaryMaxUsdEstimate` | USD estimates for INR salaries |
| `experienceRange` | Required experience (e.g., "2-5 years", "10+ years", "Fresher") |
| `skills` | Required tech skills (e.g., \["Python", "Django", "PostgreSQL"]) |
| `jobType` | Employment type (FULL\_TIME, INTERNSHIP) |
| `descriptionText` / `descriptionHtml` | Full job description in plain text and HTML |
| `companySize` | Company size range (e.g., "0-20", "1000-5000") |
| `fundingStage` | Startup funding stage (Bootstrapped, Raised funding, Profitable) |
| `companyLinkedin` | Company LinkedIn URL |
| `companyWebsite` | Company website URL |
| `companyFounded` | Year the company was founded |
| `recruiterName` / `recruiterPhoto` | Recruiter who posted the job |
| `url` / `applyUrl` | Direct CutShort job URL |

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `skills` | array | No | `["python"]` | Skill or role terms to search on CutShort (e.g., `["python", "react", "devops"]`) |
| `startUrls` | array | No | — | CutShort job URLs or search URLs |
| `maxItems` | integer | No | 50 | Maximum job listings to save across all skills and URLs |
| `outputMode` | string | No | `"full"` | Output detail level: `full`, `summary`, or `urls_only` |

### Output example

```json
{
    "jobId": "6a2bf99d308c1234359cc547",
    "jobSlug": "backend-engineer-python-example-startup",
    "url": "https://cutshort.io/job/backend-engineer-python-example-startup",
    "applyUrl": "https://cutshort.io/job/backend-engineer-python-example-startup",
    "title": "Backend Engineer - Python",
    "jobType": "FULL_TIME",
    "descriptionText": "We are looking for a Backend Engineer...",
    "descriptionHtml": "<p>We are looking for a Backend Engineer...</p>",
    "companyName": "Example Startup",
    "companyId": "6a2bf0d8b550804212f62c2f",
    "companySlug": "jobs-at-example-startup",
    "companyUrl": "https://cutshort.io/company/jobs-at-example-startup",
    "companyLogo": "https://cdnv2.cutshort.io/company-static/example/logo.png",
    "companyWebsite": "https://example.com",
    "companyLinkedin": "https://linkedin.com/company/example",
    "companyFounded": 2022,
    "companySize": "11-50",
    "fundingStage": "Bootstrapped",
    "location": "Bengaluru",
    "locations": ["Bengaluru", "Remote"],
    "remote": true,
    "remoteType": "remote_only",
    "salaryMin": 1200000,
    "salaryMax": 2500000,
    "salaryCurrency": "INR",
    "salaryPeriod": "year",
    "salaryRawText": "₹12L - ₹25L / yr",
    "salaryMinUsdEstimate": 14457,
    "salaryMaxUsdEstimate": 30120,
    "experienceRange": "2-5 years",
    "experienceMin": 2,
    "experienceMax": 5,
    "skills": ["Python", "Django", "PostgreSQL"],
    "recruiterName": "Example Recruiter",
    "recruiterPhoto": "https://cdn.cutshort.io/public/users/example",
    "matchedSkill": "python",
    "matchedInputs": ["python"],
    "sourceUrl": "https://cutshort.io/jobs/python-jobs",
    "sourcePage": 1,
    "sourcePosition": 1,
    "dedupeKey": "6a2bf99d308c1234359cc547",
    "scrapedAt": "2026-06-14T12:00:00.000000+00:00"
}
```

### How to scrape CutShort

1. **Go to the CutShort Scraper** on [Apify Store](https://apify.com/parsebird/cutshort-jobs-scraper).
2. **Enter skill terms** — Add skills like `python`, `react`, `devops`, `nodejs`, or `java` in the Skills field.
3. **Or paste CutShort URLs** — Add job URLs (`https://cutshort.io/job/...`) or search URLs (`https://cutshort.io/jobs/python-jobs`) to the CutShort URLs field.
4. **Set the job limit** — Start with 25 for a quick test, then increase once you verify the output.
5. **Choose an output mode** — Use `full` for all 40+ fields, `summary` for key fields, or `urls_only` for just job IDs and URLs.
6. **Click Start** — The scraper runs in under a minute for most skill searches.
7. **Download results** — Export your data as JSON, CSV, or Excel from the Dataset tab. Or access results via the [Apify API](https://docs.apify.com/api/v2).

**Python API example:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/cutshort-jobs-scraper").call(
    run_input={
        "skills": ["python", "react"],
        "maxItems": 50,
        "outputMode": "full",
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} at {item['companyName']} — {item.get('salaryRawText', 'N/A')}")
```

**JavaScript API example:**

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("parsebird/cutshort-jobs-scraper").call({
    skills: ["python", "react"],
    maxItems: 50,
    outputMode: "full",
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.title} at ${item.companyName} — ${item.salaryRawText || "N/A"}`);
});
```

### Use cases

- 📊 **Salary benchmarking** — Compare pay ranges for Indian tech roles by skill, experience, and funding stage
- 🏢 **Startup intelligence** — Track which startups are hiring, their funding stage, company size, and headcount
- 🔍 **Recruiter research** — Find in-demand skills and actively hiring companies with recruiter contacts
- 📈 **Job market monitoring** — Schedule daily runs to track CutShort hiring trends over time
- 🤖 **AI agent data feeds** — Pipe structured job data into LLM workflows, chatbots, or recommendation engines
- 📋 **Job aggregators** — Add curated startup roles to your platform with CutShort as a data source

Use [Apify scheduling](https://docs.apify.com/platform/schedules) to automate recurring exports. Connect to Google Sheets, Slack, or Zapier via [Apify integrations](https://docs.apify.com/platform/integrations).

### How much does it cost to scrape CutShort?

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `job-listing-scraped` | $0.0015 | **$1.50** |

Each job listing saved to the dataset counts as one event. Runs that find no matching jobs do not incur charges. Use the `maxItems` parameter to control costs — start with 25, then scale up.

**Typical costs:**

- 50 jobs (one skill search): ~$0.075
- 200 jobs (4 skills): ~$0.30
- 1,000 jobs (many skills + URLs): ~$1.50

New users get $5 of free Apify platform credit — enough for thousands of CutShort job listings.

### Limits and caveats

- CutShort may omit fields such as salary, recruiter, funding stage, company size, remote type, or full description on some listings.
- Broad skill terms can return overlapping jobs. The Actor de-duplicates jobs within the run before saving them.
- Direct job URLs normally produce one job item each when the public page still exposes job data.
- The Actor is built for public job listings, not private dashboards, applicant data, or application submission.
- Invalid targets and no-result searches are reported in logs, not as placeholder dataset items.
- Each CutShort skill page returns up to 50 jobs. To get more results, use multiple skill terms.
- Some skill terms (like `react`) may need the full name used by CutShort (like `reactjs`). The scraper automatically tries common alternatives.

### FAQ

**Do I need a CutShort account?**
No. The scraper accesses publicly visible job listings. No login, cookies, or API keys are needed.

**How does CutShort compare to Naukri?**
CutShort has fewer listings but focuses on curated tech and startup jobs with better salary transparency, company/funding data, and recruiter details. For mass India job data, pair this with [Naukri Jobs Scraper](https://apify.com/parsebird/naukri-jobs-scraper).

**What currency are the salaries in?**
Indian Rupees (INR), reported as annual CTC (Cost to Company). USD estimates are provided automatically for INR salaries.

**Can I schedule recurring runs?**
Yes. Use [Apify's scheduling feature](https://docs.apify.com/platform/schedules) to run daily, weekly, or at any interval. Results are available via API or [integrations](https://docs.apify.com/platform/integrations).

**Can I export to CSV or Excel?**
Yes. Download results in JSON, CSV, XML, or Excel directly from the Apify Console Dataset tab, or use the [API](https://docs.apify.com/api/v2) to retrieve results programmatically.

**What does the `outputMode` parameter do?**
It controls how much data is saved per job. `full` includes all 35+ fields (descriptions, company data, recruiter info). `summary` includes key fields like title, company, salary, and skills. `urls_only` includes just the job ID, URL, and title.

**How do I access results via API?**
Use the [Apify API](https://docs.apify.com/api/v2) or client libraries for Python and JavaScript. See the code examples in the [How to scrape CutShort](#how-to-scrape-cutshort) section. Get your API token at [console.apify.com/settings/integrations](https://console.apify.com/settings/integrations).

**Why did a skill return 0 jobs?**
CutShort uses specific skill slugs for its pages. If a skill like `react` returns empty, try the full name `reactjs`. The scraper automatically tries common alternatives, but very niche terms may not have a corresponding CutShort page.

### Is it legal to scrape CutShort?

Scraping publicly available data is generally legal according to the [US Ninth Circuit ruling in HiQ Labs v. LinkedIn](https://apify.com/blog/is-web-scraping-legal). This scraper only accesses publicly visible job listings on CutShort.io — it does not log in, bypass paywalls, or access private data. Always review [CutShort's Terms of Service](https://cutshort.io/terms) and consult legal counsel for your specific use case. For more details, see [Apify's guide on web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

### Related Actors

- [Naukri Jobs Scraper](https://apify.com/parsebird/naukri-jobs-scraper) — Scrape Naukri.com job listings across India with salaries, skills, and AmbitionBox reviews
- [HelloWork Jobs Scraper](https://apify.com/parsebird/hellowork-jobs-scraper) — Scrape HelloWork job listings in France with salaries and skills
- [BuiltIn Jobs Scraper](https://apify.com/parsebird/builtin-jobs-scraper) — Scrape BuiltIn.com tech jobs in the US with company details
- [HiringCafe Jobs Scraper](https://apify.com/parsebird/hiringcafe-jobs-scraper) — Scrape HiringCafe job listings with structured salary data

# Actor input Schema

## `skills` (type: `array`):

Skill or role terms to search on CutShort (e.g., 'python', 'react', 'devops', 'machine-learning'). Each skill returns up to 50 jobs. Lowercase with hyphens for multi-word skills.

## `startUrls` (type: `array`):

Optional CutShort job URLs (e.g., https://cutshort.io/job/...) or search URLs (e.g., https://cutshort.io/jobs/python-jobs). Each job URL returns one listing; each search URL returns up to 50.

## `maxItems` (type: `integer`):

Maximum number of job listings to save across all skills and URLs.

## `outputMode` (type: `string`):

Controls how much data is saved per job. 'full' includes all fields, 'summary' includes key fields only, 'urls\_only' includes just the job ID, URL, and title.

## Actor input object example

```json
{
  "skills": [
    "python",
    "react"
  ],
  "maxItems": 25,
  "outputMode": "full"
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "skills": [
        "python",
        "react"
    ],
    "maxItems": 25,
    "outputMode": "full"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/cutshort-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "skills": [
        "python",
        "react",
    ],
    "maxItems": 25,
    "outputMode": "full",
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/cutshort-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "skills": [
    "python",
    "react"
  ],
  "maxItems": 25,
  "outputMode": "full"
}' |
apify call parsebird/cutshort-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parsebird/cutshort-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mfbBHTzK40dmRtxAr/builds/ZJ3bEofcfYx0ayAQK/openapi.json
