Cutshort Jobs Scraper | Salaries, Skills and Companies avatar

Cutshort Jobs Scraper | Salaries, Skills and Companies

Pricing

from $1.53 / 1,000 jobs

Go to Apify Store
Cutshort Jobs Scraper | Salaries, Skills and Companies

Cutshort Jobs Scraper | Salaries, Skills and Companies

Cutshort scraper for tech jobs in India: get 50 jobs in 3 seconds with 41 fields each, including salary range, experience, skills, remote policy, posting date, recruiter and the hiring company's website, LinkedIn, size and stage. Search by keyword, city, Cutshort URL or job ID. No account needed.

Pricing

from $1.53 / 1,000 jobs

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Cutshort Jobs Scraper | Tech Jobs, Salaries and Hiring Companies in India (2026)

1 search. 50 Cutshort jobs. 41 fields per job.

From SilentFlow. Creators of Pinterest Scraper and Leboncoin Scraper, with 420,000+ combined lifetime runs.

Every Cutshort job as one clean row: the role, the salary band in numbers, the experience range, the skills, the workplace, the posting date, the recruiter, and the company behind it with its website, LinkedIn, size, stage and founding year. Type a skill, paste a Cutshort link or give the job codes you already track, and get a table you can filter, chart, load into a CRM or feed to a job board. The default input returned 50 Python jobs in 14 seconds on 11 Oct 2026.

Why choose this actor?

Copying Cutshort jobs into a spreadsheet one card at a time? Getting a salary like "₹8L - ₹24L / yr" as text you still have to split into numbers? Finding a company that is hiring for your stack, then opening three more tabs to get its website, its LinkedIn and its size?

  • 38 fields per job, filled from the job list itself. On the default run (keyword python, 50 jobs, 11 Oct 2026), 38 data fields carried a value on at least half of the rows and 28 on every single row: title, skills, employment type, salary minimum and maximum with currency and period, experience range, location list, workplace type, posting date, recruiter, apply link, and the hiring company's name, logo and Cutshort page. Turn on one option and the job page adds the country, postcode, job category and tags, and the recruiter's last activity: 43 fields on at least half of the rows on a 60-job React run in Pune.
  • The hiring company on the same row, ready for outreach. 12 of those fields describe the company that posted the job: its name, Cutshort id and page, logo, website, LinkedIn page, team size, funding stage, company type, founding year, follower count and description, with its tech stack when the company lists one. On the default run, 41 of 50 jobs came with the company website and 36 with its LinkedIn page, with no second tool and no extra step. When a recruitment agency posts for an unnamed client, the row says so in isHiringForClient and names the agency in agencyName.
  • Three ways in: keywords, Cutshort links and job IDs. Type skills or roles (react, sales, product manager), paste any Cutshort link (a job list, a city list, a company page, or one job), or list the 8-character codes that end a job link to refresh the jobs you already track. On 11 Oct 2026, one run mixing a company page, the remote Golang list and two job codes returned 80 jobs, the two tracked jobs first.

Try Cutshort Jobs Scraper

Paste this input into the Input tab (JSON view) and press Start. It is the default input of the form: the newest Python jobs on Cutshort, up to 50.

{
"searchQueries": ["python"],
"maxItems": 50
}

The Apify Free plan is enough to run it and to try the actor on your own skills, cities and companies: no credit card, no Cutshort account, no setup. Each job becomes one row of the dataset, which you can export as JSON, CSV or Excel, open in Google Sheets, or read from the Apify API. On 11 Oct 2026 this input returned 50 jobs posted between 5 and 10 October, 19 of them for Bengaluru only, with salaries quoted in INR and skills such as Python, SQL, AWS, React.js, Generative AI, PySpark and PostgreSQL.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full context of this actor:

You have access to the Cutshort Jobs Scraper on Apify: silentflow/cutshort-jobs-scraper
It reads public job postings from Cutshort (cutshort.io), the Indian tech and startup hiring platform.
One dataset row per job.
Input (no field is required; with no input it reads the newest "python" jobs):
- searchQueries (array of strings): skills or roles, e.g. ["python", "react", "sales", "product manager"].
Each one is matched to the closest Cutshort job category. Without a city, the run reads the national
list, then each city list, removing repeats.
- startUrls (array of URLs): Cutshort links. Job lists (https://cutshort.io/jobs/python-jobs,
https://cutshort.io/jobs/reactjs-jobs-in-pune, https://cutshort.io/jobs/remote-golang-jobs),
company pages (https://cutshort.io/company/<alias>) for all their open jobs, or single jobs
(https://cutshort.io/job/<title>-<code>).
- jobIds (array of strings): the 8-character code ending a job link ("Se3ugX4F"), the 24-character
job id, or a job link. Read first, before keywords and lists.
- location (string): one of bangalore-bengaluru, mumbai, delhi-ncr-gurgaon-noida, hyderabad, pune,
chennai, ahmedabad, kolkata, jaipur, indore, coimbatore, kochi-cochin, chandigarh, bhubaneswar.
Names and aliases also work ("Bangalore", "Gurugram", "Bombay"). Any other place ("Mysore", "Dubai")
keeps the jobs whose location names it.
- remoteOnly (boolean, default false): keep fully remote and remote-friendly jobs only.
- postedWithinDays (integer): keep jobs posted in the last N days.
- maxItems (integer, default 100): cap on rows across all inputs.
- includeDetails (boolean, default false): read each job page to add countryCode, postalCode, category,
tags and lastActiveAt. Jobs read by id always have them.
Output per job (48 fields):
- id (string, stable), shortId (string), url (string), title (string)
- description (string, plain text), descriptionHtml (string), skills (array), employmentTypes (array,
"full-time", "internship"...), categories (array), category (string), tags (array)
- companyName, companyId, companyUrl, companyLogo, companyWebsite, companyLinkedin, companyDescription,
companyType, companyStage, companySize (strings), companyFoundedYear, companyFollowers (integers),
companyTechStack (array), isHiringForClient (boolean), agencyName (string)
- recruiterName, recruiterPhotoUrl (strings)
- salaryMin, salaryMax (integers, in salaryCurrency), salaryCurrency ("INR", "USD"...), salaryPeriod
("year"), salaryText (as shown on Cutshort), isSalaryHidden (boolean)
- experienceMinYears, experienceMaxYears (integers)
- location (string), locations (array), workplaceType ("onsite", "remote", "remote-friendly"),
isRemote (boolean), countryCode, postalCode (strings), postedAt, lastActiveAt (RFC 3339 UTC)
- applyUrl (string), searchQuery, sourceUrl (the keyword or link that found the job), scrapedAt
Absent values are null.
Use apify-client for Python or JavaScript, or the Apify API.

How to scrape Cutshort jobs

Get the newest React jobs in India

One keyword, no filter. The run reads the React list newest first and stops at 100 jobs.

{
"searchQueries": ["react"],
"maxItems": 100
}

Pull remote Python jobs posted this week

Remote only, last 7 days. The run uses Cutshort's remote list for the skill when there is one, and stops reading as soon as it reaches older jobs.

{
"searchQueries": ["python"],
"remoteOnly": true,
"postedWithinDays": 7,
"maxItems": 200
}

Compare data and DevOps salaries in Bengaluru

Two roles, one city, one month, with the job page details. Each row carries the salary band as numbers in salaryMin and salaryMax, next to experienceMinYears, so you can chart pay against seniority in a spreadsheet.

{
"searchQueries": ["data engineer", "devops"],
"location": "bangalore-bengaluru",
"postedWithinDays": 30,
"maxItems": 300,
"includeDetails": true
}

Input parameters

ParameterTypeDefaultWhat it does
searchQueriesarraynone (the form suggests python)Skills or roles. Each is matched to the closest Cutshort job category: react reads React.js jobs, node.js Node.js jobs, go Golang jobs, data scientist Data Science jobs.
startUrlsarraynoneCutshort links: job lists, city lists, remote lists, company pages, single jobs.
jobIdsarraynoneJob codes, job ids or job links. Read before anything else.
locationstringall of IndiaOne of the 14 cities Cutshort keeps lists for, by code or name, or any other place to filter on.
remoteOnlybooleanfalseKeep only fully remote and remote-friendly jobs.
postedWithinDaysintegernoneKeep only jobs posted in the last N days.
maxItemsinteger100Cap on rows across all keywords, links and IDs. No fixed upper limit.
includeDetailsbooleanfalseAdd country, postcode, category, tags and last recruiter activity from each job page.
debugModebooleanfalseDetailed logs for support.

Formats accepted. Keywords ignore case and punctuation: React.js, react and REACT are one search, ui/ux and UI UX too, and a trailing "jobs" is dropped. Cities read by code (bangalore-bengaluru), by Cutshort's name (Bengaluru (Bangalore)), or by the name people type (Bangalore, BLR, Gurugram, Noida, New Delhi, Bombay, Cochin, Calcutta), with or without a state after a comma. Job IDs read as the 8-character code (Se3ugX4F), the 24-character id, a job link, or the apply link of a job. Links work with or without https:// and www..

What gets combined. Keywords, links and IDs add up in one run, and a job reached twice is saved once. The city, remote and date filters narrow keywords, job lists and company pages, and they combine: python with remoteOnly and postedWithinDays: 7 returns the remote and remote-friendly Python jobs of the last seven days. Jobs asked by ID are always returned as asked.

What data can you extract from Cutshort?

Each row holds 48 fields in eight groups:

  • Identity (4): id is Cutshort's own id of the job, stable for its whole life; shortId is the 8-character code that ends the job link; url is the public job page; title is the role as posted.
  • Content (7): description in plain text, one paragraph or bullet per line, and descriptionHtml as Cutshort shows it; skills as the employer tagged them; employmentTypes (full-time, internship); categories, the Cutshort job families the posting belongs to (Fullstack Developer, Backend Developer); and, from the job page, category (tech) and tags (fullstack, frontend).
  • Company (15): companyName, companyId, companyUrl (its Cutshort page), companyLogo, companyWebsite, companyLinkedin, companyDescription in plain text, companyType (Product, Services, Products & Services), companyStage (Bootstrapped, Raised funding, Profitable), companySize (0-20 to 5000+), companyFoundedYear, companyFollowers on Cutshort, companyTechStack, and isHiringForClient with agencyName when an agency posts for a client.
  • Recruiter (2): recruiterName, the person who posted the job, and recruiterPhotoUrl.
  • Pay and experience (8): salaryMin and salaryMax as whole numbers, salaryCurrency, salaryPeriod, salaryText exactly as Cutshort writes it (₹8L - ₹24L / yr), isSalaryHidden, experienceMinYears and experienceMaxYears.
  • Place and time (8): location as shown, locations as a list, workplaceType (onsite, remote, remote-friendly), isRemote, and from the job page countryCode and postalCode; postedAt and lastActiveAt (the recruiter's last activity on the job), RFC 3339 in UTC.
  • Links (1): applyUrl, the Cutshort page where a candidate applies.
  • Meta (3): searchQuery and sourceUrl, the keyword and the list or company page that found the job, and scrapedAt.

What stays empty, and why: the company block is empty when an agency hides its client's name (10 of 50 rows on the default run), and Cutshort shows that client under a generic name such as "AI-Powered Technology Company". Smaller companies leave their size, stage or LinkedIn blank on Cutshort, so those fields follow (34 of 50 rows had a size and a stage). locations is empty on fully remote jobs, where location reads "Remote only". The job-page fields are null unless includeDetails is on or the job was read by ID.

Output example

One real row from a React run in Pune on 11 Oct 2026 with includeDetails on. The three long texts are shortened here for reading; the dataset holds them in full.

{
"id": "6ac27f32b5e298d0a1f5f669",
"shortId": "kO1clZ0g",
"url": "https://cutshort.io/job/Full-Stack-Engineer-Javascript-Pune-Vijay-Sales-kO1clZ0g",
"title": "Full Stack Engineer (Javascript)",
"description": "About Vijay Sales\n\nVijay Sales is a consumer electronics and appliances retailer, selling through its stores across India, its website and its app.\nOur technology team builds the software the business runs on: order ...",
"descriptionHtml": "<p><strong>About Vijay Sales</strong></p><p><br /></p><p>Vijay Sales is a consumer electronics and appliances retailer, selling through its stores across India, its website and its app.</p><p>Our technology team builds ...",
"skills": ["React.js", "NodeJS (Node.js)", "MongoDB", "Javascript", "TypeScript", "Amazon Web Services (AWS)", "RESTful APIs", "Message queues"],
"employmentTypes": ["full-time"],
"categories": ["Fullstack Developer"],
"category": "tech",
"tags": ["fullstack"],
"companyName": "Vijay Sales",
"companyId": "59a7daa10adfdb705f9666e7",
"companyUrl": "https://cutshort.io/company/vijay-sales-3WgpdIfa",
"companyLogo": "https://cdnv2.cutshort.io/company-static/59a7daa10adfdb705f9666e7/user_uploaded_data/logos/company_logo.png",
"companyWebsite": "https://vijaysales.com",
"companyLinkedin": "https://linkedin.com/company/vijaysales",
"companyDescription": "Offering guests the best in quality and service has been the primary principle at Vijay Sales since its inception as a partnership firm by Mr. Nanu Gupta, a visionary with astute business acumen and foresight.A ...",
"companyType": "Products & Services",
"companyStage": "Profitable",
"companySize": "5000+",
"companyFoundedYear": 1967,
"companyFollowers": 2987,
"companyTechStack": null,
"isHiringForClient": false,
"agencyName": null,
"recruiterName": "Tech Recruiter",
"recruiterPhotoUrl": "https://cdn.cutshort.io/public/material-letter-icons/T.png",
"salaryMin": 500000,
"salaryMax": 1000000,
"salaryCurrency": "INR",
"salaryPeriod": "year",
"salaryText": "₹5L - ₹10L / yr",
"isSalaryHidden": false,
"experienceMinYears": 3,
"experienceMaxYears": 7,
"location": "Pune",
"locations": ["Pune"],
"workplaceType": "onsite",
"isRemote": false,
"countryCode": "IN",
"postalCode": "411013",
"postedAt": "2026-10-04T16:30:42Z",
"lastActiveAt": "2026-10-07T11:16:04Z",
"applyUrl": "https://cutshort.io/profile/view/j/6ac27f32b5e298d0a1f5f669",
"searchQuery": "react",
"sourceUrl": "https://cutshort.io/jobs/reactjs-jobs-in-pune",
"scrapedAt": "2026-10-11T01:42:24Z"
}

Advanced usage

Track every open job of a company

Paste a company page to get all its open jobs, page after page. Run it weekly against your competitors or your target accounts and compare the job ids between runs to see what opened and what closed. On 11 Oct 2026 one company page returned its 25 open jobs over three pages.

{
"startUrls": [
{ "url": "https://cutshort.io/company/hashone-careers-93-CM0iGHkj" }
],
"maxItems": 500
}

Refresh the jobs you already track

Keep the shortId of the jobs in your pipeline and read them again by ID: each comes back with its current salary, location and last recruiter activity, plus the job-page fields. A job that was closed or removed is named in the log and never saved as an empty row.

{
"jobIds": ["Se3ugX4F", "6waKrOCy", "kO1clZ0g"]
}

Build a list of companies hiring for your stack

Run several skills at once without a city: each keyword reads its national list, then each city list, and a job found twice is saved once. On 11 Oct 2026 the keyword python alone gave 1,500 distinct jobs in 4 minutes 40 seconds before reaching the cap. Group the dataset by companyId to get one line per company, with its website, LinkedIn, size and stage, and the roles it is hiring for.

{
"searchQueries": ["golang", "kubernetes", "aws"],
"maxItems": 2000
}

Read one Cutshort list exactly as the site shows it

When you already filtered on Cutshort, paste the list link. City lists and remote lists work the same way, and the remote, date and city filters still apply on top if you set them.

{
"startUrls": [
{ "url": "https://cutshort.io/jobs/reactjs-jobs-in-pune" },
{ "url": "https://cutshort.io/jobs/remote-golang-jobs" }
],
"maxItems": 300
}

Feed a daily job board or Slack channel

Schedule this input every morning in Apify (Schedules tab). With postedWithinDays: 1 each run only saves the jobs posted in the last 24 hours and stops reading as soon as it reaches older ones, so the daily dataset is your new-jobs feed. Connect a webhook, Make, Zapier or Google Sheets integration to push it where your team reads it.

{
"searchQueries": ["product manager", "data analyst", "sales"],
"postedWithinDays": 1,
"maxItems": 500
}

FAQ

What is Cutshort? Cutshort (cutshort.io) is an Indian hiring platform for tech and startup jobs, where companies and recruiters post roles with a salary band, an experience range and skills. Its jobs cluster in India's tech hubs, Bengaluru first, then Mumbai, Delhi NCR, Hyderabad, Pune and Chennai, plus remote roles.

Do I need a Cutshort account? No. The actor reads the job pages anyone can open without logging in. No account, no password, no API key.

How many jobs can one keyword return? A Cutshort job list holds a few hundred jobs, newest first. Without a city, the actor continues with that skill's city lists and removes repeats, so one keyword can go well past one list: python returned 1,500 distinct jobs on 11 Oct 2026 before reaching the maxItems cap. Set maxItems to what you need.

Which keywords work? Skills and roles as Cutshort names its categories: languages and tools (python, java, react, node.js, golang, kubernetes, aws, salesforce), roles (product manager, data engineer, devops, android, frontend, backend, full stack) and functions (sales, marketing, hr, business development, customer success). A keyword that matches no Cutshort category is named in the log, and the rest of the run goes on.

How fresh is the data? Jobs are read when the run starts, at most an hour behind the site. postedAt is the posting date Cutshort shows, and lastActiveAt (with includeDetails) the last time the recruiter acted on the job, which tells an active job from a quiet one.

Why is the company name sometimes generic? Recruitment agencies post some jobs for clients they do not name. Cutshort then shows a description such as "AI-Powered Technology Company" instead of the client. The row keeps that name in companyName, sets isHiringForClient to true, and names the agency in agencyName, so you can keep or drop those jobs. When the client has no name at all, companyName is the agency, as on Cutshort's own job page.

Why does a job say "Best in industry" but still have a salary range? Some employers hide the salary on the page. Cutshort still holds the band they entered, and the actor returns it in salaryMin and salaryMax with isSalaryHidden set to true, so you can include or exclude those rows in a salary study.

Does it cover jobs outside India? Yes when Cutshort lists them: remote roles and jobs abroad, such as postings in the United Arab Emirates, come with their location, and salaries in USD or SGD keep their currency in salaryCurrency. The 14 city lists are Indian cities; type any other place in the city field to keep the jobs whose location names it.

Can I run several keywords, cities or companies in one run? Several keywords, links and job IDs, yes, in one run, with repeats removed. The city field takes one city per run; run the actor once per city, or leave the city empty to cover every city list.

Are the links permanent? url, companyUrl and applyUrl stay valid while the job and the company page are online on Cutshort. id and shortId never change for a job, so they are the keys to use when you compare runs. Logos and recruiter photos are plain image links.

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

📈 Marketing

🧰 More tools

Support

Need something this scraper does not do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from Cutshort: job postings and company profiles that anyone can open without an account. It does not bypass any login, paywall, or CAPTCHA, and it reads no candidate profile or application. Users are responsible for complying with Cutshort's terms of service and applicable data protection laws (GDPR, CCPA, PIPL, and India's DPDP Act where relevant). Rows include the names and photos of the recruiters who posted the jobs, which are personal data: handle them accordingly and only for a lawful purpose. The data returned is informational; verify it before any regulated use.

Built by SilentFlow for recruiters, sales teams, salary analysts and job boards who want Cutshort's jobs as data, not browser tabs.