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

Extract job listings from CutShort.io with job titles, company names, locations, salaries, experience requirements, skills, job descriptions, and application URLs. Ideal for job market research, recruitment analytics, hiring trends, lead generation, and job data collection.

- **URL**: https://apify.com/shahidirfan/cutshort-jobs-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Cutshort Jobs Scraper do?

Cutshort Jobs Scraper collects live job listings from Cutshort.io into a structured dataset. Paste any Cutshort jobs URL, or search by keyword and location, and the Actor returns job titles, companies, salaries, experience ranges, skills, remote policy, posting dates, and full job descriptions.

It is built for recruiters, job seekers, and analysts. You can download results as CSV, Excel, or JSON, or send them to a connected workflow.

### Why use Cutshort Jobs Scraper?

- **One clean row per job** - Stop copying job cards by hand. Every record follows the same field names and can be filtered or joined with other datasets.
- **URL or keyword input** - Reuse a Cutshort jobs page you already trust, or let the Actor find matching roles from a keyword and city.
- **Full listing coverage** - The Actor follows pages until it reaches your result limit, page limit, or the last listing.
- **Salary and experience data** - Capture published salary ranges, experience bands, and employment types so you can compare roles without opening each page.
- **No empty columns** - Fields that a listing does not publish are left out of that record instead of being saved as null.
- **Scheduled runs and exports** - Run the Actor on a schedule, download the dataset, or send new jobs to a spreadsheet or webhook.

### What data can you extract from Cutshort?

| Field               | Description                                      |
| ------------------- | ------------------------------------------------ |
| `title`             | Job title as published by the employer           |
| `company_name`      | Hiring company                                   |
| `company_url`       | Cutshort company profile link                    |
| `company_logo`      | Company logo image URL                           |
| `company_size`      | Employee count band                              |
| `company_type`      | Company business type                            |
| `company_stage`     | Funding or growth stage                          |
| `company_founded`   | Year the company was founded                     |
| `company_followers` | Follower count on Cutshort                       |
| `company_website`   | Company website                                  |
| `company_linkedin`  | Company LinkedIn page                            |
| `location`          | Job city or list of cities                       |
| `is_remote`         | Whether remote work is allowed                   |
| `remote_type`       | Remote only, remote allowed, or on-site          |
| `employment_types`  | Full time, part time, contract, internship       |
| `experience_min`    | Minimum years of experience                      |
| `experience_max`    | Maximum years of experience                      |
| `experience_text`   | Experience range as published                    |
| `salary_min`        | Minimum annual salary                            |
| `salary_max`        | Maximum annual salary                            |
| `salary_currency`   | Salary currency code                             |
| `salary_text`       | Salary range as published                        |
| `skills`            | Skills required for the role                     |
| `description_html`  | Job description markup                           |
| `description_text`  | Plain text job description                       |
| `posted_date`       | ISO posting timestamp                            |
| `posted_date_label` | Relative posting label                           |
| `recruiter_name`    | Person who created the job                       |
| `hiring_for_client` | Whether the role is for an end client            |
| `job_url`           | Public job page                                  |
| `apply_url`         | Application link                                 |
| `job_id`            | Cutshort job identifier                          |
| `source`            | Source website                                   |
| `search_query`      | Listing slug or keyword that produced the record |
| `scraped_at`        | Collection timestamp                             |

### How to use Cutshort Jobs Scraper

1. Open the Actor on Apify Store.
2. Paste a Cutshort jobs URL, or enter a keyword and location.
3. Set the maximum number of results and the page limit.
4. Run the Actor and open the dataset preview.
5. Download the dataset or connect it to your workflow.

An explicitly provided URL takes priority over keyword and location. If you leave the URL at its default, a supplied keyword is used. If only a location is supplied, the Actor collects startup jobs for that city. With no input at all, the Actor uses the example Bangalore startup jobs page.

### Input Parameters

| Parameter            | Type   | Required | Default                                                        | Description                                                                                         |
| -------------------- | ------ | -------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `url`                | String | No       | `https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru` | A Cutshort jobs listing, single job, or search URL. An explicit URL wins over keyword and location. |
| `keyword`            | String | No       | -                                                              | Job title or skill, for example `react developer`, `data analyst`, or `devops`.                     |
| `location`           | String | No       | -                                                              | City filter, for example `Bangalore`, `Mumbai`, `Pune`, or `Delhi NCR`.                             |
| `results_wanted`     |        | No       | `20`                                                           | Maximum number of jobs to save.                                                                     |
| `max_pages`          |        | No       | `10`                                                           | Safety cap on listing pages. Each page holds up to 50 jobs.                                         |
| `proxyConfiguration` | Object | No       | `{}`                                                           | Optional proxy settings. Apify Proxy is used only when you enable it.                               |

### Output Data

Each dataset item is one job. All fields are optional because Cutshort does not publish every value for every listing. The Actor leaves empty values out of the record instead of writing null.

| Field               | Type    | Description                    |
| ------------------- | ------- | ------------------------------ |
| `job_id`            | String  | Unique job identifier          |
| `title`             | String  | Job title                      |
| `company_name`      | String  | Company name                   |
| `company_url`       | String  | Company profile URL            |
| `company_logo`      | String  | Logo image URL                 |
| `company_size`      | String  | Employee band                  |
| `company_type`      | String  | Business type                  |
| `company_stage`     | String  | Funding stage                  |
| `company_founded`   | Number  | Founding year                  |
| `company_followers` | Number  | Cutshort follower count        |
| `company_website`   | String  | Website URL                    |
| `company_linkedin`  | String  | LinkedIn URL                   |
| `job_url`           | String  | Job page URL                   |
| `apply_url`         | String  | Apply link                     |
| `location`          | String  | Job location                   |
| `is_remote`         | Boolean | Remote eligibility             |
| `remote_type`       | String  | Remote policy label            |
| `employment_types`  | Array   | Employment types               |
| `experience_min`    | Number  | Minimum experience             |
| `experience_max`    | Number  | Maximum experience             |
| `experience_text`   | String  | Experience label               |
| `salary_min`        | Number  | Minimum salary                 |
| `salary_max`        | Number  | Maximum salary                 |
| `salary_currency`   | String  | Currency code                  |
| `salary_text`       | String  | Salary label                   |
| `skills`            | Array   | Required skills                |
| `description_html`  | String  | Description markup             |
| `description_text`  | String  | Plain text description         |
| `posted_date`       | String  | ISO posting date               |
| `posted_date_label` | String  | Relative posting label         |
| `recruiter_name`    | String  | Job creator                    |
| `hiring_for_client` | Boolean | Client hiring flag             |
| `source`            | String  | Source website                 |
| `search_query`      | String  | Query that produced the record |
| `scraped_at`        | String  | Collection timestamp           |

### Usage Examples

#### Collect jobs from a Cutshort URL

Paste a jobs page and collect the first 50 listings.

```json
{
    "url": "https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru",
    "results_wanted": 50,
    "max_pages": 2
}
```

#### Search by keyword and city

Find React roles in Bangalore without preparing a URL.

```json
{
    "keyword": "react developer",
    "location": "Bangalore",
    "results_wanted": 100,
    "max_pages": 5
}
```

Keyword searches start with Cutshort's own search matches. If you request more jobs than the search returns, the Actor fills the remaining count from the matching Cutshort job category when one exists.

#### Collect a larger set through Apify Proxy

Use proxy settings for bigger runs or scheduled monitoring.

```json
{
    "url": "https://cutshort.io/jobs/devops-jobs",
    "results_wanted": 300,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

#### Collect a single job

Paste a Cutshort job page to save one complete record.

```json
{
    "url": "https://cutshort.io/job/Java-Angular-Bengaluru-Bangalore-VY-SYSTEMS-PRIVATE-LIMITED-rjSAIPxQ",
    "results_wanted": 1
}
```

### Sample Output

```json
{
    "job_id": "6adc32eb5a1e8fe07baeb8cd",
    "title": "Java + Angular",
    "company_name": "VY SYSTEMS PRIVATE LIMITED",
    "company_url": "https://cutshort.io/company/vy-systems-private-limited-16-e43Khktp",
    "company_logo": "https://cdnv2.cutshort.io/company-static/676cda781975060026864b32/user_uploaded_data/logos/company_logo.png",
    "company_size": "100-1000",
    "company_type": "Services",
    "company_stage": "Profitable",
    "company_founded": 2000,
    "company_followers": 3610,
    "company_website": "https://vysystems.com",
    "company_linkedin": "https://linkedin.com/company/vysystems",
    "job_url": "https://cutshort.io/job/Java-Angular-Bengaluru-Bangalore-VY-SYSTEMS-PRIVATE-LIMITED-rjSAIPxQ",
    "apply_url": "https://cutshort.io/profile/view/j/6adc32eb5a1e8fe07baeb8cd",
    "location": "Bengaluru (Bangalore)",
    "is_remote": false,
    "remote_type": "On-site",
    "employment_types": ["Full time"],
    "experience_min": 4,
    "experience_max": 10,
    "experience_text": "4 - 10 years",
    "salary_min": 1500000,
    "salary_max": 2200000,
    "salary_currency": "INR",
    "salary_text": "₹15L - ₹22L / yr",
    "skills": ["Java", "Angular (2+)", "Python", "Spring Boot"],
    "description_text": "Java, Spring Boot, Angular, Python. Java python Angular - 4 to 7 yrs (Bangalore).",
    "posted_date": "2026-10-24T04:24:11.521Z",
    "posted_date_label": "Posted 24 Oct 2026",
    "recruiter_name": "Revathi R",
    "hiring_for_client": false,
    "source": "cutshort.io",
    "search_query": "startup-jobs-in-bangalore-bengaluru",
    "scraped_at": "2026-10-31T13:12:02.180Z"
}
```

### Tips for Best Results

- Start with 20 to 50 results to check the dataset before a larger run.
- Use a full Cutshort jobs URL when you need a specific category or city page.
- Keep the URL field at its default if you want to search by keyword or location.
- Use city names as Cutshort writes them, for example `Bangalore`, `Delhi NCR`, or `Kochi`.
- Increase `max_pages` when you request more than 50 jobs.
- Some listings hide salary or company details. Those fields are omitted rather than filled with guesses.
- Keyword searches for niche roles may return fewer jobs than requested because Cutshort's public search has a fixed page size.

### Integrations

- **Google Sheets** - Send each run to a spreadsheet for review or sharing.
- **Webhooks** - Start a downstream workflow when a run finishes.
- **Make or Zapier** - Connect job data to no-code automations.
- **Apify platform access** - Read datasets from your own application or data pipeline.
- **CSV, Excel, JSON, XML** - Download results in the format your tools already use.

### Frequently Asked Questions

#### Can I use a Cutshort job URL instead of a keyword?

Yes. Paste any Cutshort jobs listing page, a single job page, or a Cutshort search page. An explicit URL takes priority over the keyword and location fields.

#### Can I search by keyword only?

Yes. Leave the URL at its default and enter a keyword. Add a location if you want to narrow the results.

#### Why are some fields missing from a record?

Cutshort does not publish every field for every listing. The Actor leaves missing salary, company size, or website values out of the record instead of storing null, so the dataset stays clean.

#### Why did I get fewer jobs than I requested?

Three limits can stop a run early: the last available page, the `max_pages` cap, and the number of matching live jobs. Niche keyword and city combinations can also return a small number of public search matches.

#### Does the Actor require a Cutshort account?

No. It collects publicly visible job listings. It does not log in, apply to jobs, or access private candidate data.

#### Can I export the dataset to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats.

#### Can I run this Actor on a schedule?

Yes. Create a schedule in Apify Console to run the Actor hourly, daily, or weekly. Each run creates a new dataset that you can compare with earlier runs.

#### Can I combine several searches in one run?

No. Each run uses one URL or one keyword and location pair. Start separate runs or tasks for multiple searches and combine the datasets afterwards.

#### Is it legal to collect Cutshort job data?

Collecting public job data can be legal, but you are responsible for complying with Cutshort's terms, privacy rules, and the laws that apply to your use case.

### Related Actors

- [Naukri Jobs Scraper](https://apify.com/shahidirfan/Naukri-Jobs-Scraper) - Collect job listings from Naukri.com for Indian hiring research.
- [Foundit Jobs Scraper](https://apify.com/shahidirfan/Foundit-Jobs-Scraper) - Gather structured job data from Foundit.in, formerly Monster India.
- [Apna.co Jobs Scraper](https://apify.com/shahidirfan/Apna-co-Jobs-Scraper) - Collect job listings from Apna.co.
- [Startup.jobs Scraper](https://apify.com/shahidirfan/Startup-Jobs-Scraper) - Gather startup roles from Startup.jobs for comparison with Cutshort data.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor collects publicly available job listings for legitimate research and monitoring. Users are responsible for using the data responsibly and complying with applicable laws and Cutshort's terms of service.

# Actor input Schema

## `url` (type: `string`):

A Cutshort jobs listing, single job or search URL. Example: https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru. An explicitly provided URL takes priority over keyword and location.

## `keyword` (type: `string`):

Job title or skill to search, for example "react developer" or "data analyst". Used when no explicit URL is provided. Overrides location.

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

City filter, for example "Bangalore", "Mumbai" or "Delhi NCR". Used when no keyword or explicit URL is provided.

## `results_wanted` (type: `integer`):

Maximum number of jobs to save to the dataset.

## `max_pages` (type: `integer`):

Safety cap on the number of listing pages to request. Each page holds up to 50 jobs.

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

Optional proxy settings. Apify Proxy is only used when you enable it here.

## Actor input object example

```json
{
  "url": "https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {}
}
```

# Actor output Schema

## `overview` (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 = {
    "url": "https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/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 = { "url": "https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru" }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/cutshort-jobs-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 '{
  "url": "https://cutshort.io/jobs/startup-jobs-in-bangalore-bengaluru"
}' |
apify call shahidirfan/cutshort-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/cutshort-jobs-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/BZT5EvmRBuXxwsgKN/builds/LnLiORmFvGUzPr9KT/openapi.json
