Google Jobs Scraper - Job Search & Apply Links avatar

Google Jobs Scraper - Job Search & Apply Links

Pricing

from $3.50 / 1,000 google job results

Go to Apify Store
Google Jobs Scraper - Job Search & Apply Links

Google Jobs Scraper - Job Search & Apply Links

Search Google Jobs by keyword and location. Export unique jobs with titles, companies, full descriptions, salary text, posting dates, and direct ATS or job-board apply links. No Google login or external API key required.

Pricing

from $3.50 / 1,000 google job results

Rating

0.0

(0)

Developer

Chronometrica

Chronometrica

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Categories

Share

πŸ”Ž What does Google Jobs Scraper do?

Google Jobs Scraper searches public Google Jobs results by keyword and location. It saves one clean row for each unique job.

Select a Google market, add one or more searches, choose an optional shared location, and set a saved-row limit. Each row can include the job title, company, location, full description, salary text, schedule, posting age, Google job URL, and direct application options.

Use it to:

  • πŸ”” Build scheduled job alerts.
  • πŸ§‘β€πŸ’Ό Monitor hiring by company, role, or location.
  • πŸ“Š Study public job demand and salary text.
  • 🧱 Add job listings to a database, dashboard, or job board.
  • πŸš€ Find direct employer, career-site, and job-board application links.
  • πŸ“¦ Export data as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.

The Actor reads public, logged-out Google Jobs results. It does not need a Google account, browser cookies, or an external API key.

πŸ“¦ What Google job data can I extract?

Each default-dataset row represents one unique Google job found during one Actor run.

Data groupExample fields
πŸ” Search contextquery, requestedLocation, country, language
πŸ†” Job identityjobId, jobUrl
πŸ’Ό Job detailstitle, companyName, location, via, description
πŸ’° Job factspostedAtRaw, scheduleType, salaryRaw, tags
πŸš€ Application linksapplyOptions[].title, applyOptions[].link
🚦 Row statestatus, statusReason
πŸ• Run contextobservedAt, runId, schemaVersion

Missing public values stay null or use an empty list. The Actor does not guess missing values or replace them with zero.

The applyOptions list contains the application pages that Google supplies. Each item has a provider title and a direct link. The list can include an employer applicant tracking system (ATS), a company career page, or a job board. An ATS is software that an employer uses to receive job applications.

One job can have several application options. The raw dataset row contains the full list. The default Results table does not show this nested field.

βš™οΈ Can I use this Actor through an API?

Yes. Run the Actor in Apify Console or connect it to the Apify API, Python SDK, JavaScript SDK, webhooks, schedules, or Apify integrations.

Keep your Apify token in an environment variable or secret store. Do not place it in source code.

curl -X POST \
"https://api.apify.com/v2/acts/chronometrica~google-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"market": "CA-en",
"queries": ["data analyst", "business intelligence analyst"],
"location": "Toronto, Ontario, Canada",
"maxItems": 25
}'

Use the returned run ID to check the run, read the default dataset, or attach a webhook. The same JSON input works with the Apify Python and JavaScript clients.

🎯 Why scrape Google Jobs?

Google Jobs brings listings from employers, career sites, and job boards into one search view. This can give you broader public job coverage than one job board.

Use caseHow the data helps
πŸ”” Job alertsFind new jobs for a role and location on a schedule.
πŸ§‘β€πŸ’Ό Recruiting researchTrack companies, roles, locations, and hiring language.
πŸ“Š Labor-market analysisCompare visible demand, salary text, and posting activity.
🧱 Job-board feedsLoad unique job rows and direct application choices.
πŸ•΅οΈ Employer monitoringWatch hiring for selected companies or role groups.
πŸ€– Automated workflowsSend jobs to a database, spreadsheet, CRM, or alert system.

The Actor collects source data. It does not rank candidates, assess people, or make hiring decisions.

πŸ’΅ Pricing

Google Jobs Scraper uses pay-per-result pricing. One result means one unique job row saved to the default dataset. The price depends on your Apify plan.

Apify planPrice per 1,000 saved jobs
Free$5.00
Starter$4.50
Scale$4.00
Business$3.50

Duplicate and invalid candidates do not create a result charge. Use maxItems to set a firm saved-row limit. Check the Store Pricing tab for the current rate before a production run.

Start with maxItems: 10 when you test a new search.

πŸš€ How do I use Google Jobs Scraper?

  1. Open Google Jobs Scraper in Apify Console.
  2. Select the Google market and result language.
  3. Enter one or more job titles or keywords.
  4. Enter one optional city or region for all searches.
  5. Set the maximum number of jobs to save.
  6. Click Start.
  7. Open Output to inspect the dataset and run summary.
  8. Download the data or connect the run to another tool.

⬇️ Input

{
"market": "CA-en",
"queries": ["data analyst", "business intelligence analyst"],
"location": "Toronto, Ontario, Canada",
"maxItems": 25
}
SettingWhat it controls
marketTested Google country site and result language. It is not a strict job-country filter.
queriesOne to 100 job-title or keyword searches. Each query can have up to 200 characters.
locationOne optional city, region, or country for all searches. A city gives precise results.
maxItemsMaximum unique rows saved across the run. The allowed range is 1 to 1,000.

The form offers 95 tested country and language pairs. Countries with more than one tested language have one option for each language. The Actor still accepts the earlier country and language API fields when they form one supported market pair.

The Actor removes duplicate queries without treating letter case as different. It gives active searches balanced row turns in query order. It requests only the search pages that can still contribute to the shared saved-row limit. This prevents one broad search from using the full limit and avoids paying for pages that cannot add a saved row.

The Actor follows Google's continuation tokens until it reaches maxItems, the source ends, or the 100-page per-query safety cap.

⬆️ Output sample

Results are stored in the default dataset. Field order is stable for JSON, CSV, spreadsheet, API, and database work.

{
"query": "data analyst",
"requestedLocation": "Toronto, Ontario, Canada",
"country": "CA",
"language": "en",
"jobId": "example-job-id",
"jobUrl": "https://www.google.com/search?ibp=htl;jobs&htidocid=example-job-id",
"title": "Data Analyst",
"companyName": "Example Company",
"location": "Toronto, ON",
"via": "Example Careers",
"description": "Analyze business data and prepare reports.",
"postedAtRaw": "Posted 2 days ago",
"scheduleType": "Full-time",
"salaryRaw": "$70,000-$85,000 a year",
"tags": ["2 days ago", "Full-time", "No degree mentioned"],
"applyOptions": [
{
"title": "Apply on Example Careers",
"link": "https://jobs.example.com/data-analyst"
}
],
"observedAt": "2026-08-08T23:40:50.000Z",
"runId": "example-run-id",
"schemaVersion": "4.0",
"status": "succeeded",
"statusReason": "Job listing returned by Google Jobs."
}

πŸ“Œ Run summary

The OUTPUT record is stored in the default key-value store. It reports:

  • queriesReceived: number of unique searches received.
  • sourceStates: result state for each search.
  • pagesRequested: source batches requested.
  • candidatesSeen: jobs found before validation and duplicate removal.
  • rowsSaved: unique job rows saved and charged.
  • duplicatesSkipped: repeated job IDs not saved or charged.
  • invalidCandidatesSkipped: candidates without the required identity fields.
  • stopReason: saved_row_cap_reached or sources_exhausted.
  • startedAt and finishedAt: run times in ISO format.

Use this record to tell the difference between a small result set, duplicate jobs, a source error, and a completed saved-row limit.

A partial source state means that Google returned useful jobs before a later continuation request failed. The Actor keeps and charges only those useful rows.

🚦 Status, identity, and data quality

  • Every saved row has a valid jobId, title, and companyName.
  • Every saved row has status: "succeeded".
  • The Actor uses jobId to remove duplicates across all queries in one run.
  • observedAt is the collection time. postedAtRaw is source text, not a normalized posting time.
  • tags contains the exact job tags that Google supplies. The Actor does not infer or classify these values.
  • description, salary, schedule, location, source, job URL, and application options can be missing.
  • If every search produces no useful rows, the Actor writes OUTPUT and then marks the run as failed.
  • Rows from a later run are new observations. The Actor does not update rows in an earlier dataset.

The Actor matches each detail section with Google's job ID. If Google omits that ID and several jobs have the same title, the Actor leaves uncertain description, tags, and applyOptions values empty.

βœ… Tested behavior

The current release passed a fixed 100-row cloud check. It saved 100 rows with 100 unique Google job IDs and 100 result billing events. The check also confirmed the public field order, nested application-link order, and absence of secret keys in the dataset and run summary.

Live job results can change between runs. This check confirms the release process. It does not promise that each query will return 10 jobs.

πŸ”’ Public-source boundary

The Actor reads public, logged-out Google Jobs results. It does not:

  • Ask for a Google login, browser cookies, or account credentials.
  • Access private or account-only data.
  • Ask for an external search API key.
  • Solve access challenges or bypass access controls.
  • Open application pages or check their contents.
  • Add candidate scores or make hiring decisions.

⚠️ Limits and interpretation

  • Google controls which jobs and fields are visible for each search.
  • Google can stop pagination before the requested row limit.
  • Duplicate jobs across queries can reduce the final row count.
  • Descriptions, salary text, schedules, and application links can be missing.
  • Google can change, remove, localize, or limit results at any time.
  • Country, language, query wording, and location can change the results.
  • The Google market localizes results. It does not guarantee that every job is in that country.
  • Application URLs are links supplied by Google. Check each destination before you use it in an automated process.
  • maxItems is a saved-row limit. It is not a promise that the source contains that many jobs.

❓ FAQ

Does this Actor need a Google login, cookies, or an external API key?

No.

Why did I get fewer jobs than requested?

Google can return fewer jobs, repeat the same job across searches, omit a Jobs result page, or limit the visible results. Check sourceStates, candidatesSeen, duplicatesSkipped, invalidCandidatesSkipped, rowsSaved, and stopReason in OUTPUT.

How do I collect more than 10 jobs?

Use several focused queries. Search related job titles separately. The Actor removes repeated Google job IDs across those searches.

Open the raw dataset row and read applyOptions. The default Results table does not show this nested list.

Can I run the same searches on a schedule?

Yes. Use an Apify schedule. Use jobId to compare jobs across runs and observedAt to record when each row was collected.

βš–οΈ Responsible use

This Actor is an independent tool. It is not affiliated with or endorsed by Google. You are responsible for your use of the data and for compliance with applicable laws and source terms.

πŸ›Ÿ Support

Include the Apify run ID, a small input sample, what you expected, and what you received. State whether the issue affects one row or the full run. Do not send passwords, cookies, or account credentials.

  • LinkedIn Jobs Scraper β€” collect public jobs with descriptions, criteria, salary signals, and Easy Apply status.
  • Indeed Jobs Scraper β€” collect public jobs with salaries, descriptions, benefits, skills, and apply links.
  • Upwork Job Scraper β€” find public freelance jobs with skills, budgets, proposal counts, and activity signals.