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

Export job listings from Apna (apna.co), India's job portal for delivery, sales, telecalling, office, IT and many more roles. Search by keyword and city, area or state with Apna's filters, or paste listing and job links. Get company, salary range, location with coordinates, experience, openings, full description and skills. No login needed.
Export job listings from Apna (apna.co), one of India's biggest job portals for delivery, sales, telecalling, back-office, retail, driver, IT and many more roles. Search by keyword and city, area or state with Apna's own filters, or paste Apna links, and get clean rows with company, monthly salary range, location with coordinates, experience, openings, full description and skills. No login, no cookies, and it costs $0.70 per 1,000 jobs.
delivery boy, data entry, telecaller) and one or more locations (e.g. Bengaluru, Mumbai, Delhi-NCR, Andheri East, Kerala). Leave the search terms empty to list every job in a location.https://apna.co/jobs/delivery-jobs-in-mumbai or a single job page.| Field | What it does |
|---|---|
searchTerms | Job titles, skills or company names. Each term is searched in every location. |
locations | Indian cities, areas or states, matched with Apna's own location search. Empty = all of India. |
startUrls | Apna listing, company, search or job links. |
maxResults | Total jobs to save (0 = no limit). |
maxResultsPerSearch | Optional cap per search term and location pair or link. |
postedWithin, departments, workModes, employmentTypes, shifts, minMonthlySalary, experienceYears, education, englishLevel, gender | Apna's own filters. |
sortBy | Relevance, newest first, or salary high to low. |
includeDetails | Read each job's page for the full description, skills and role category (on by default). |
{
"searchTerms": ["delivery"],
"locations": ["Mumbai", "Pune"],
"maxResults": 100,
"postedWithin": "168",
"workModes": ["wff"]
}
One row per job.
| Field | Description |
|---|---|
title, company, companyId, companyLogoUrl | The job and the employer |
url | The job page on apna.co |
location, area, city, state, address, pincode, latitude, longitude | Where the job is |
salaryMin, salaryMax, salaryText, fixedSalaryMin, fixedSalaryMax, earningPotential, hasIncentives | Monthly pay in rupees as Apna shows it |
experience, experienceLevel, minExperienceYears, maxExperienceYears | Experience asked for |
openings, education, englishLevel, gender, shift, workMode, employmentType | Job requirements and conditions |
department, category, jobRole, roleCategory, skills | What kind of job it is |
isExternalJob, externalApplyUrl | Jobs you apply for on the employer's own site |
employerPrefersCall, employerPrefersWhatsapp | How the employer likes to be contacted |
tags, highlights | Labels shown on Apna's job card (e.g. "Urgently hiring") |
description, descriptionHtml | Full job description |
postedDate, updatedAt, expiresOn | Dates |
searchQuery, searchLocation, sourceUrl, scrapedAt | Where the row came from |
Example from a test run (description shortened):
{
"jobId": 892351445,
"title": "Delivery Partner",
"company": "Zepto",
"url": "https://apna.co/job/mumbai-bombay/delivery-partner-892351445",
"location": "Mumbai/Bombay",
"area": "Johar Chowk",
"city": "Mumbai",
"state": "Maharashtra",
"latitude": 18.9581934,
"longitude": 72.8320729,
"salaryMin": 50000,
"salaryMax": 110000,
"salaryText": "₹50,000 - ₹1,10,000 monthly",
"fixedSalaryMin": 50000,
"fixedSalaryMax": 90000,
"earningPotential": 110000,
"hasIncentives": true,
"experience": "Freshers can apply",
"openings": 10,
"education": "10th or Below 10th",
"englishLevel": "No English Required",
"shift": "Day shift",
"workMode": "Field job",
"employmentType": "Part time",
"department": "Delivery / Driver / Logistics",
"category": "Delivery Person",
"roleCategory": "Delivery",
"tags": ["Field Job", "Part Time", "Any experience", "No English Required"],
"highlights": ["Urgently hiring", "Fast HR reply"],
"description": "Job Title: Delivery Boy – Zepto\nSalary: ₹50,000 – ₹90,000 per month\nTiming: Flexible shifts\n...",
"postedDate": "2026-02-10",
"updatedAt": "2026-02-24T06:03:58Z",
"searchQuery": "delivery",
"searchLocation": "Mumbai/Bombay"
}
You pay $0.70 per 1,000 jobs ($0.0007 per job saved), plus a small platform usage fee for compute and datacenter proxy traffic, which is not included in the job price. In our tests a 100-job run cost $0.071 in total and a 1,000-job run with full details used under $0.01 of platform usage, so 1,000 jobs ≈ $0.71 in total. You are never charged for jobs that were not saved, and a run stops cleanly when your maximum charge is reached.
Is it legal to scrape Apna? The actor only reads public job listings that anyone can see on apna.co without an account. Check Apna's terms and your local laws (including data protection rules) for your use case.
Do I need an Apna account or a proxy? No account. The default datacenter proxy works for Apna. If Apna ever refuses the datacenter exits before any job is found, the run switches to Indian residential exits by itself (billed at the residential rate).
How many jobs can I get? As many as Apna lists. Location-only searches and listing links page through every job (for example, all jobs in a city). Apna's keyword search itself stops at 500 jobs per search term and location, so for more, add more terms or locations, or leave the search term empty.
Why is a field empty?
Apna does not show every field for every job. Jobs from external employers (isExternalJob: true) often have no salary or address, and some employers write no description. Turning off includeDetails also leaves description empty for keyword search results.
Why do I get jobs that do not contain my keyword? Apna's search also matches related roles, skills and spelling variants, just like on the website.
Can I schedule it or use the API? Yes. Schedule runs from the console, or start runs and download results through the API in JSON, CSV or Excel.
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.
searchTermsarrayOptionalSearch terms
Job titles, skills or company names, one per line, e.g. 'delivery boy', 'data entry', 'telecaller', 'software engineer'. Each term is searched in every location below. Leave empty to list every job in the locations.
locationsarrayOptionalLocations
Indian cities, areas or states, one per line, e.g. 'Bengaluru', 'Mumbai', 'Delhi-NCR', 'Andheri East', 'Kerala'. Names are matched with Apna's own location search. Leave empty to search all of India.
startUrlsarrayOptionalApna links
Optional. Links copied from apna.co: listing pages (apna.co/jobs/delivery-jobs-in-mumbai, apna.co/jobs/jobs-in-pune, company pages like apna.co/jobs/swiggy_instamart-jobs), search pages (apna.co/job-search?...) or single jobs (apna.co/job/bengaluru-bangalore/senior-engineer-341894136). Filters in the link are kept.
maxResultsintegerOptionaldefault 20Maximum jobs
How many jobs to save in total across all searches and links. 0 = no limit.
maxResultsPerSearchintegerOptionalMaximum jobs per search
Optional cap for each search term and location pair (or link), so one big search does not use the whole limit. Apna's keyword search itself shows at most 500 jobs per search term and location; listing pages and location-only searches have no such ceiling.
postedWithinenumOptionalDate posted
Only jobs posted or updated recently.
departmentsarrayOptionalDepartments
Only jobs in these Apna departments.
workModesarrayOptionalWork mode
Only jobs with these work modes.
employmentTypesarrayOptionalJob type
Full time or part time.
shiftsarrayOptionalShift
Day or night shift.
minMonthlySalaryintegerOptionalMinimum monthly salary (₹)
Only jobs that pay at least this much per month in rupees, e.g. 20000.
experienceYearsintegerOptionalYour experience (years)
Only jobs open to a candidate with this many years of experience (0 = fresher).
educationenumOptionalHighest education
Only jobs open to a candidate with this education.
englishLevelenumOptionalEnglish level
Only jobs open to a candidate with this English level.
genderenumOptionalOpen to
Only jobs open to female or male candidates.
sortByenumOptionaldefault "relevant"Sort by
Order of the results. Relevance is Apna's default.
includeDetailsbooleanOptionaldefault trueInclude job details
Read each job's own page for the full description (keyword search results come without it), skills and role category. Turn off for a faster, listing-only export.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter exits work for Apna. 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 | integer | Apna job ID |
| title | string | null | Job title |
| company | string | null | Employer name |
| companyId | integer | null | Apna employer ID |
| companyLogoUrl | string | null | Employer logo |
| url | string | null | Job page on apna.co |
| location | string | null | Location as Apna shows it |
| area | string | null | Area / locality |
| city | string | null | City |
| state | string | null | State |
| address | string | null | Job or company address |
| pincode | string | null | PIN code |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| salaryMin | integer | null | Minimum monthly salary (INR) |
| salaryMax | integer | null | Maximum monthly salary (INR) |
| salaryText | string | null | Salary as shown |
| salaryCurrency | string | null | Currency |
| fixedSalaryMin | integer | null | Fixed part, minimum |
| fixedSalaryMax | integer | null | Fixed part, maximum |
| earningPotential | integer | null | Earning potential incl. incentives |
| hasIncentives | boolean | null | Incentives on top of the fixed salary |
| experience | string | null | Experience requirement |
| experienceLevel | string | null | Experience level |
| minExperienceYears | integer | null | Minimum years |
| maxExperienceYears | integer | null | Maximum years |
| openings | integer | null | Number of openings |
| education | string | null | Minimum education |
| englishLevel | string | null | English level |
| gender | string | null | Open to (when the employer set it) |
| shift | string | null | Shift |
| workMode | string | null | Work from office, home or field |
| employmentType | string | null | Full time or part time |
| isWorkFromHome | boolean | null | Work from home |
| isPartTime | boolean | null | Part time |
| isFlexible | boolean | null | Flexible hours |
| jobRole | string | null | Job role |
| department | string | null | Department |
| departmentId | integer | null | Department ID |
| category | string | null | Category |
| categoryId | integer | null | Category ID |
| subCategory | string | null | Sub-category |
| roleCategory | string | null | Role / category (job details) |
| skills | array | null | Skills required (job details) |
| degreeRequirements | array | null | Degrees required (job details) |
| workDays | string | null | Work days |
| workHours | string | null | Work hours |
| applicantLocation | string | null | Where applicants may live (SAME_CITY, WITHIN_10KM, ANYWHERE...) |
| isExternalJob | boolean | null | Applied on the employer's site |
| externalApplyUrl | string | null | Employer's apply link |
| employerPrefersCall | boolean | null | Employer accepts calls |
| employerPrefersWhatsapp | boolean | null | Employer accepts WhatsApp |
| isInternational | boolean | null | Job abroad |
| internationalCountry | string | null | Country (jobs abroad) |
| internationalCity | string | null | City (jobs abroad) |
| depositAmount | number | null | Deposit the employer asks for, if any |
| depositReason | string | null | Reason for the deposit |
| tags | array | null | Tags shown on the job card |
| highlights | array | null | Highlights (e.g. Urgently hiring) |
| description | string | null | Full description (plain text) |
| descriptionHtml | string | null | Full description (HTML) |
| postedDate | string | null | Posted |
| updatedAt | string | null | Last updated |
| expiresOn | string | null | Expires |
| searchQuery | string | null | Search term that found the job |
| searchLocation | string | null | Location searched |
| sourceUrl | string | null | Link the job came from |
| scrapedAt | string | null | Scraped at |
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 saved Apna job listing. | $0.0007 |
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/apna-jobs-scraper').call({
"searchTerms": [
"delivery"
],
"locations": [
"Mumbai"
],
"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/apna-jobs-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/apna-jobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
15 telecaller jobs in Delhi-NCR with salary, company, address, experience and the full description.
Paste an Apna listing page: 10 delivery jobs in Mumbai with salary, area, openings and full details.
15 telecaller jobs from all of India with salary, location and full job details.
15 of the newest jobs listed in Delhi, any role, with salary, area and full details.
15 telecaller jobs in Delhi-NCR with the listing fields only (title, company, salary, location), faster.
15 work-from-office jobs in Pune posted in the last 7 days.
15 jobs anywhere in Kerala, any role, with salary, city and full details.
Paste a company page from apna.co (here Swiggy Instamart) to list its open jobs across India.

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.