# CutShort Jobs Scraper — India Tech Jobs, Salary & Skills (`haketa/cutshort-scraper`) Actor

Scrape CutShort.io tech job listings in India: job title, company, salary range, required skills, years of experience, location, remote type, company size & stage, and full description. Search by role or skill, filter by city, or paste search URLs. Export JSON/CSV/Excel.

- **URL**: https://apify.com/haketa/cutshort-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Jobs Scraper — India Tech Jobs, Salary & Skills

Collect **CutShort.io** technology job listings from India as clean, structured data. Search by role or skill and get every job back with title, company, **salary range**, **required skills**, **years of experience**, location, remote type, and rich company details — size, stage and type.

Built for **tech recruiters, staffing agencies, job seekers, salary and market analysts, and data teams** who need India tech‑hiring data in JSON, CSV or Excel instead of paging through listings by hand.

***

### ✨ Why use this scraper

- **Full job records, not just titles** — each job includes company, salary range, required skills, experience band, location, remote type and company profile data.
- **Structured salary & experience** — salary min/max in INR plus the display text, and the required experience range in years, ready for analysis.
- **Tech‑skill tags** — the exact skills each role asks for (Python, React, AWS, Kubernetes …), perfect for matching and demand analysis.
- **Company intelligence** — company name, size, funding stage and type come with every job.
- **Search by role or skill** — use CutShort's role and skill pages, optionally filtered by city.
- **Optional full detail** — enrich each job with its complete description, posted date, deadline and employment type.
- **Clean, typed output** — numbers as numbers, skills as arrays — ready for spreadsheets, databases and BI tools.
- **Export anywhere** — JSON, CSV, Excel, HTML or via the Apify API and integrations.

***

### 🚀 Quick start

1. Enter one or more **roles or skills** (for example `python`, `devops`, `product manager`).
2. *(Optional)* Set a **city** (`bangalore`, `mumbai`, `remote`).
3. Set **Maximum jobs** and click **Start**.

Each job comes back as one clean record.

***

### 📥 Input

| Field | Type | Description |
|---|---|---|
| **Roles or skills** (`searchQueries`) | array | Roles/skills to search. Use CutShort's names (python, devops, backend-developer, product-manager, datascience). |
| **City** (`location`) | string | Optional Indian city filter applied to every role. |
| **Search URLs** (`searchUrls`) | array | Optional CutShort role/search URLs to scrape directly. |
| **Enrich with full job details** (`includeJobDetails`) | boolean | Add full description, posted date, deadline and employment type. |
| **Maximum jobs** (`maxItems`) | integer | Cap across all roles. |
| **Concurrency** (`maxConcurrency`) | integer | Pages fetched in parallel. |
| **Proxy configuration** (`proxyConfiguration`) | object | Apify Proxy is recommended. |

#### Example 1 — one role

```json
{
  "searchQueries": ["python"],
  "maxItems": 200
}
```

#### Example 2 — several roles in a city

```json
{
  "searchQueries": ["backend-developer", "devops", "data science"],
  "location": "bangalore",
  "maxItems": 500
}
```

#### Example 3 — with full detail

```json
{
  "searchQueries": ["product manager"],
  "includeJobDetails": true
}
```

#### Example 4 — paste a role URL

```json
{
  "searchUrls": ["https://cutshort.io/jobs/python-jobs"]
}
```

***

### 📤 Output

Each job is one dataset item. Example:

```json
{
  "jobId": "6a69d90f4613efecf4d13392",
  "title": "Founding Full Stack Engineer",
  "url": "https://cutshort.io/job/Founding-Full-Stack-Engineer-ProofofSkill-MhZYPd8e",
  "company": "ProofofSkill",
  "companySize": "0-20",
  "companyStage": "Raised funding",
  "companyType": "Product",
  "companyFounded": 2022,
  "location": "Remote only",
  "remoteType": "remote_only",
  "roleTypes": ["full_time"],
  "salary": "₹4L - ₹7L / yr",
  "salaryMin": 400000,
  "salaryMax": 700000,
  "salaryCurrency": "INR",
  "experienceMin": 2,
  "experienceMax": 5,
  "skills": ["React.js", "TypeScript", "Next.js", "frontend", "backend"],
  "hiringForClient": false,
  "applyUrl": "https://cutshort.io/apply/...",
  "sourceRole": "python",
  "detailEnriched": false,
  "scrapedAt": "2026-08-26T10:00:00.000Z"
}
```

#### Field reference

**Job**

| Field | Description |
|---|---|
| `jobId` | CutShort job identifier. |
| `title` | Job title / headline. |
| `url` | Job page URL. |
| `roleTypes` | Employment type(s), e.g. `full_time`, `contract`. |
| `applyUrl` | Application URL. |
| `sourceRole` | The role/skill query this job came from. |

**Compensation & experience**

| Field | Description |
|---|---|
| `salary` | Salary text as shown (e.g. "₹4L - ₹7L / yr"). |
| `salaryMin`, `salaryMax` | Structured salary bounds. |
| `salaryCurrency` | Currency (INR). |
| `experienceMin`, `experienceMax` | Required experience range, in years. |
| `skills` | Skills the role asks for. |

**Location & work model**

| Field | Description |
|---|---|
| `location` | Display location. |
| `remoteType` | `remote_only`, `hybrid`, `in_office`, etc. |

**Company**

| Field | Description |
|---|---|
| `company` | Hiring company. |
| `companySize` | Headcount band (e.g. 0-20, 100-500). |
| `companyStage` | Funding/company stage. |
| `companyType` | Company type. |
| `companyFounded` | Year founded. |
| `hiringForClient` | Whether the company is hiring on behalf of a client. |

**Detail enrichment & meta** (when enabled)

| Field | Description |
|---|---|
| `description` | Full job description (clean text). |
| `datePosted`, `validThrough` | Posted date and application deadline. |
| `employmentType` | Schema employment type. |
| `companyProfileUrl` | Company profile link. |
| `detailEnriched` | Whether full detail was fetched. |
| `scrapedAt` | ISO timestamp of the scrape. |

***

### 💡 Use cases

- **Tech recruiters & staffing** — monitor demand for roles and skills across India, benchmark competitor postings, and build sourcing lists by company and city.
- **Salary & compensation analysts** — aggregate `salaryMin`/`salaryMax` and `experienceMin`/`experienceMax` by role, skill and city to build up‑to‑date India tech pay benchmarks.
- **Job seekers** — track new postings for your stack, with salary, experience and company stage in one place.
- **Talent intelligence** — measure hiring trends, remote‑vs‑office mix, and which skills and stages are hiring.
- **Startup & funding research** — combine `companyStage`, `companySize` and hiring activity to spot growing companies.
- **ATS / CRM feeds** — pipe structured jobs into applicant‑tracking systems, dashboards and lead tools.
- **Researchers & data teams** — build clean datasets of the Indian tech labour market.

***

### 🗂️ Roles & skills to try

CutShort organizes jobs by role and skill pages. Use the exact names CutShort uses (browse **cutshort.io/jobs** for the full list). Popular ones:

**Engineering roles**

- `backend-developer`, `frontend-developer`, `full-stack-developer`, `android-developer`, `ios-developer`
- `devops`, `software-development`, `software-architecture`, `qa`

**Languages & frameworks**

- `python`, `java`, `javascript`, `nodejs`, `golang`, `reactjs`, `angular`, `spring-boot`

**Data & AI**

- `datascience`, `machine-learning`, `data-engineering`, `deep-learning`, `nlp`

**Cloud & infra**

- `aws`, `azure`, `kubernetes`, `docker`, `terraform`

**Product, design & more**

- `product-manager`, `ui-ux-design`, `digital-marketing`, `content-writing`

> Tip: if a role returns nothing, it likely uses a slightly different name on CutShort — check the exact slug on **cutshort.io/jobs** (for example "datascience" rather than "data science"), or paste the role URL into **Search URLs**.

***

### 🎯 Tips for best results

- **Use CutShort's role names.** Roles map to specific pages; `datascience` works where `data science` may not. When in doubt, paste the role URL.
- **Add a city.** Set `location` to focus on one market (bangalore, mumbai, pune, delhi, hyderabad, remote).
- **Keep detail off for speed.** The listing already has salary, skills, experience and company data; enable **Enrich with full job details** only when you need the full description and dates.
- **Filter after export.** Pull a wide net, then filter on `salaryMin`, `experienceMin`, `remoteType`, `skills` or `companyStage` in your spreadsheet or database.
- **Combine roles.** Add several related roles/skills to cover a segment in one run.

***

### 📈 Scaling up

- Add **more roles/skills** to widen coverage across the tech market.
- Add a **city** or run several cities to slice the market geographically.
- **Schedule** recurring runs to track how salaries, skills demand and hiring evolve.

***

### 🔌 Run it your way

- **Apify Console** — enter roles and click Start.
- **API** — start runs and pull the dataset programmatically.
- **Scheduler** — refresh the jobs feed on a schedule.
- **Integrations** — push results to Google Sheets, Zapier, Make, webhooks, S3 and more.

***

### ❓ FAQ

**Which country does CutShort cover?**
CutShort focuses on the India technology job market.

**Do I need an account or API key?**
No. Just enter roles/skills or paste search URLs.

**Are salaries included?**
Yes, when the employer publishes them — as `salary` text plus structured `salaryMin`/`salaryMax` in INR.

**Do I get the required skills and experience?**
Yes — `skills` lists the technologies the role asks for, and `experienceMin`/`experienceMax` give the required years.

**A role returned no jobs — why?**
CutShort uses specific role/skill names. Try the exact slug from cutshort.io/jobs (e.g. `datascience`, `reactjs`), or paste the role URL into **Search URLs**.

**Do I get the full job description?**
Turn on **Enrich with full job details** to add the complete description, posted date, deadline and employment type for each job.

**In what format is the data?**
Structured JSON by default, exportable to CSV, Excel, HTML and more.

**Can I run it on a schedule?**
Yes — use the Apify Scheduler, or start runs through the Apify API and its integrations.

***

### ⚖️ Legal & responsible use

This tool collects **publicly available** job‑posting information for legitimate business use such as recruitment, market research and salary analysis. You are responsible for how you use the data and for complying with all applicable laws and regulations, the website's terms, and data‑protection rules (including India's DPDP Act where relevant). Do not use the output to infringe intellectual‑property rights or for any unlawful purpose. This scraper is not affiliated with, endorsed by, or connected to CutShort; all trademarks belong to their respective owners.

***

#### Tags

`cutshort` · `cutshort scraper` · `cutshort.io` · `india jobs` · `tech jobs` · `it jobs` · `job scraper` · `salary data` · `tech skills` · `india tech hiring` · `startup jobs` · `remote jobs india` · `recruitment` · `talent intelligence` · `job listings`

# Actor input Schema

## `searchQueries` (type: `array`):

Roles or skills to search on CutShort (use the names CutShort uses, e.g. python, devops, backend-developer, product-manager, datascience). Browse cutshort.io/jobs for the full list.

## `location` (type: `string`):

Optional Indian city to filter by (e.g. bangalore, mumbai, remote). Applied to every role.

## `searchUrls` (type: `array`):

Optional CutShort role/search result URLs to scrape directly. Example: https://cutshort.io/jobs/python-jobs

## `includeJobDetails` (type: `boolean`):

Open each job to add the full description, posted date, application deadline and employment type. Slower; the listing already includes salary, skills, experience and company data.

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

Maximum number of job records to save across all roles.

## `maxConcurrency` (type: `integer`):

How many pages to fetch in parallel. Recommended 4–8.

## `proxyConfiguration` (type: `object`):

Apify Proxy is recommended for reliable access.

## Actor input object example

```json
{
  "searchQueries": [
    "python",
    "devops",
    "product manager"
  ],
  "location": "bangalore",
  "searchUrls": [
    "https://cutshort.io/jobs/python-jobs"
  ],
  "includeJobDetails": false,
  "maxItems": 15,
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchQueries": [
        "python"
    ],
    "maxItems": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/cutshort-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 = {
    "searchQueries": ["python"],
    "maxItems": 15,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "python"
  ],
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/cutshort-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/cutshort-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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