
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Export tech and startup jobs from Cutshort (cutshort.io), India's hiring platform for developers. Search by skill or job category and city, or paste Cutshort links. Get title, company, salary range, experience, skills, work mode, full description and the company profile: size, stage, website, LinkedIn. No login needed.
Export tech and startup jobs from Cutshort, India's hiring platform for developers. Pick skills like Python, React or DevOps (optionally cities), and get every job with salary range, experience, skills, work mode, the full description and the hiring company's profile. No login, no browser: 1,000 jobs take about 15 seconds and cost about $1.20.
python, react, data science or product manager; each is matched to one of Cutshort's 3,700+ job categories.salaryMin, salaryMax, experienceMinYears, experienceMaxYears, ready to sort and filter.python, react), or paste Cutshort links.| Field | What it does |
|---|---|
skills | Skills or job categories, e.g. python, react, devops, data science |
maxResults | How many jobs to save in total (0 = all) |
startUrls | Cutshort job lists (cutshort.io/jobs/python-jobs) or single jobs (cutshort.io/job/...) |
locations | Cities, e.g. Bengaluru, Pune, Delhi NCR, or Remote |
workMode | office, remote (incl. remote friendly) or remoteOnly |
jobType | full_time or internship |
minSalary | Minimum yearly salary in ₹, e.g. 1500000 (₹15 LPA) |
experienceYears | Only jobs open to this much experience |
postedWithinDays | Only jobs posted in the last N days |
companyStages | Bootstrapped, Raised funding, Profitable |
{
"skills": ["python", "react"],
"locations": ["Bengaluru"],
"workMode": "any",
"maxResults": 100
}
| Field | Example |
|---|---|
title | Senior Backend Engineer |
company | Acme Labs |
location / locations | Bengaluru (Bangalore) |
workMode / remote | Office / Remote / Remote friendly |
salaryMin / salaryMax / salaryCurrency / salaryPeriod | 1500000 / 3000000 / INR / year |
salaryText / salaryHidden | ₹15L - ₹30L / yr / false |
experienceMinYears / experienceMaxYears | 3 / 7 |
skills | ["Python", "Django", "AWS"] |
description | Full job description |
postedAt | 2026-10-20T09:12:44Z |
companySize / companyStage / companyType | 20-100 / Raised funding / Product |
companyWebsite / companyLinkedin / companyUrl | links |
recruiterName | Name of the person who posted the job |
url / applyUrl | Job page / Cutshort apply link |
{
"jobId": "6a969fc59683270c9dd6acbf",
"shortId": "cgSD0yeR",
"title": "AI & ML",
"url": "https://cutshort.io/job/AI-ML-Bengaluru-Bangalore-Gemba-Concepts-cgSD0yeR",
"company": "Gemba Concepts",
"companyUrl": "https://cutshort.io/company/gemba-concepts-34-c7XjXgEF",
"hiringForClient": false,
"postedByCompany": "Gemba Concepts",
"recruiterName": "Priya Sharma",
"location": "Bengaluru (Bangalore)",
"locations": ["Bengaluru (Bangalore)"],
"workMode": "Office",
"remote": false,
"jobTypes": ["Full time"],
"salaryMin": 2000000,
"salaryMax": 2500000,
"salaryCurrency": "INR",
"salaryPeriod": "year",
"salaryText": "₹20L - ₹25L / yr",
"salaryHidden": false,
"experienceMinYears": 2,
"experienceMaxYears": 3,
"experienceText": "2 - 3 years",
"skills": ["Machine Learning (ML)", "Python", "PyTorch", "MLOps", "Kubernetes"],
"description": "AI/ML Engineer\n\nLocation: Bengaluru, India (Hybrid)\n\nAbout Gemba Concepts\n…",
"postedAt": "2026-10-15T10:18:54Z",
"companySize": "100-1000",
"companyStage": "Bootstrapped",
"companyType": "Services",
"companyFounded": 2014,
"companyFollowers": 897,
"companyWebsite": "https://gembaconcepts.com",
"companyLinkedin": "https://linkedin.com/company/gemba-concepts",
"applyUrl": "https://cutshort.io/profile/view/j/6a969fc59683270c9dd6acbf",
"category": "Python",
"sourceUrl": "https://cutshort.io/jobs/python-jobs",
"scrapedAt": "2026-10-22T00:47:38Z"
}
$1.20 per 1,000 jobs ($0.0012 per job saved), and nothing for searches that find no jobs. Platform usage (compute and datacenter proxy) is billed on top at the normal rates and is tiny for this actor:
| Job | Time (measured) | Job fees | Platform usage (measured) | Total |
|---|---|---|---|---|
| 10 jobs | ~5 s | $0.012 | < $0.001 | ≈ $0.013 |
| 1,000 jobs | 13–17 s | $1.20 | ≈ $0.004 | ≈ $1.20 |
| 10,000 jobs | 1.6–3.6 min | $12.00 | ≈ $0.05 | ≈ $12.05 |
Set a maximum charge for the run and the actor stops cleanly when it is reached; you never pay for more jobs than were saved.
Is it legal to scrape Cutshort? The actor reads public job pages that anyone can open without an account. You are responsible for how you use the data; check Cutshort's terms and local laws such as GDPR and India's DPDP Act.
Do I need a Cutshort account or a proxy? No account. The default datacenter proxy works; if Cutshort refuses it, the run switches to Indian residential exits by itself.
How many jobs can I get? As many as Cutshort lists. Each Cutshort job list shows only its newest jobs (we saw 450 for Python, 700 for Java and 2,450 for startup jobs); when you ask for more and set no city, the actor continues through the category's city and remote lists, without duplicates. In our tests, 14 skills gave 10,000 unique jobs in 1.6 to 3.6 minutes.
Why is a field empty? Some employers hide the salary ("Best in industry"): then salaryHidden is true and the numbers stay empty. Recruiters hiring for a client often show only a placeholder name such as "Top MNC", so the company profile fields stay empty for those jobs.
What if a skill is not found? Each skill is matched to Cutshort's category list (e.g. react → React.js, go → Golang, data scientist → Data Science). If nothing matches, the run says so and suggests close categories.
Can I schedule it or use the API? Yes. Schedule the actor for daily runs, call it through the API, and connect the results to webhooks or integrations.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
skillsarrayOptionalSkills or job categories
One per line, e.g. 'python', 'react', 'devops', 'data science', 'product manager', 'golang'. Each is matched to Cutshort's own job category (3,700+ categories: skills, roles and industries). Use the name as Cutshort writes it (e.g. 'React.js', 'Machine Learning (ML)') or a common short form.
maxResultsintegerOptionaldefault 20Maximum jobs
How many jobs to save in total across all skills, cities and links. 0 = every job Cutshort lists for the input.
startUrlsarrayOptionalCutshort links
Optional. Links copied from cutshort.io: job lists (cutshort.io/jobs/python-jobs, cutshort.io/jobs/reactjs-jobs-in-pune, cutshort.io/jobs/remote-devops-jobs) or single jobs (cutshort.io/job/-).
locationsarrayOptionalCities
Only jobs in these cities, one per line, e.g. 'Bengaluru', 'Pune', 'Delhi NCR', 'Hyderabad'. Cutshort has its own job lists for Bengaluru, Mumbai, Delhi NCR (Gurgaon, Noida), Hyderabad, Pune, Chennai, Ahmedabad, Kolkata, Jaipur, Indore, Coimbatore, Kochi, Chandigarh and Bhubaneswar; other places are matched in each job's locations. 'Remote' keeps remote jobs. With no skill, every job Cutshort lists in the city is scraped.
workModeenumOptionalWork mode
Only office, remote-friendly or remote-only jobs.
jobTypeenumOptionalJob type
Full-time jobs or internships.
minSalaryintegerOptionalMinimum salary (₹ per year)
Only jobs whose salary range reaches at least this much per year in rupees, e.g. 1500000 for ₹15 LPA. Jobs with a hidden salary ('Best in industry') are left out when this is set.
experienceYearsintegerOptionalYour experience (years)
Only jobs whose experience range includes this many years (0 = fresher).
postedWithinDaysintegerOptionalPosted within (days)
Only jobs posted in the last N days, e.g. 7.
companyStagesarrayOptionalCompany stage
Only jobs at companies of these stages, as the company states on Cutshort.
includeDescriptionHtmlbooleanOptionaldefault falseInclude description HTML
Also save the job description as HTML (descriptionHtml). The plain-text description is always included.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter exits work for Cutshort. If they are refused, the run switches to Indian residential exits by itself.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| jobId | string | null | Cutshort job ID |
| shortId | string | null | Short ID at the end of the job link |
| title | string | null | Job title |
| url | string | null | Job page on cutshort.io |
| company | string | null | Hiring company as Cutshort shows it |
| companyUrl | string | null | Company page on cutshort.io |
| hiringForClient | boolean | null | True when a recruiter posts for a client company |
| postedByCompany | string | null | Company account that posted the job |
| postedByCompanyUrl | string | null | Posting company's page on cutshort.io |
| recruiterName | string | null | Name of the person who posted the job |
| location | string | null | Locations as one text |
| locations | array | null | Locations |
| workMode | string | null | Office, Remote or Remote friendly |
| remote | boolean | null | Remote or remote friendly |
| jobTypes | array | null | Full time and/or Internship |
| salaryMin | integer | null | Minimum salary |
| salaryMax | integer | null | Maximum salary |
| salaryCurrency | string | null | Salary currency, e.g. INR |
| salaryPeriod | string | null | year or month |
| salaryText | string | null | Salary as Cutshort shows it |
| salaryHidden | boolean | null | True when the employer hides the salary ('Best in industry') |
| experienceMinYears | integer | null | Minimum experience in years |
| experienceMaxYears | integer | null | Maximum experience in years |
| experienceText | string | null | Experience range as text |
| skills | array | null | Required skills |
| description | string | null | Full job description (text) |
| descriptionHtml | string | null | Full job description (HTML), when requested |
| postedAt | string | null | Posting date (UTC) |
| companyLogo | string | null | Company logo |
| companySize | string | null | Company size (employees) |
| companyStage | string | null | Bootstrapped, Raised funding or Profitable |
| companyType | string | null | Product, Services or Products & Services |
| companyFounded | integer | null | Year founded |
| companyFollowers | integer | null | Followers on Cutshort |
| companyWebsite | string | null | Company website |
| companyLinkedin | string | null | Company LinkedIn page |
| companyTwitter | string | null | Company X / Twitter page |
| companyDescription | string | null | About the company (text) |
| applyUrl | string | null | Cutshort apply link (needs a Cutshort account to apply) |
| category | string | null | Cutshort job category the job was found in |
| sourceUrl | string | null | Job list or link the job came from |
| scrapedAt | string | null | When the job was scraped (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One Cutshort job saved to the dataset (title, company, salary, experience, skills, description, company profile). | $0.0012 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/cutshort-scraper').call({
"skills": [
"python",
"react"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/cutshort-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/cutshort-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.