Google Jobs Search Scraper avatar

Google Jobs Search Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Google Jobs Search Scraper

Google Jobs Search Scraper

Collect public Google Jobs listings with full descriptions, structured compensation, posting-date precision, application choices, and job requirements.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Google API

Google API

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

14 days ago

Last modified

Categories

Share

What does Google Jobs Search Scraper do?

This Actor is a programmatic alternative to manually searching public Google Jobs results. It returns one business-data row per job posting and can extract the expanded description, visible application choices, compensation, date text, and source-backed requirements. It does not use private Google APIs, access private user data, or bypass access boundaries.

Browser mode is enabled by default to open matching public job details and capture expanded descriptions. Base job listings remain available if optional detail-page information cannot be collected.

Search input

The main input is a job query, optionally combined with a location, country, and language. Batch queries, Google Jobs startUrls, employment and experience filters, page limits, and a salary floor are also supported. See the Input tab for all available options.

{
"query": "software engineer",
"location": "Seattle, WA",
"country": "us",
"maxItems": 25,
"maxPages": 5,
"includeDescriptionHtml": true
}

employmentTypes and jobRequirements are single-select strings in the Apify form. API callers may provide either a string or an array. startUrls must be HTTPS Google Jobs search URLs; arbitrary websites are not accepted as search URLs.

useBrowser defaults to true and expands public job details. proxyConfiguration applies in browser mode; HTTP mode does not use it. The Actor does not solve CAPTCHAs or bypass access boundaries. resolveApplyUrls and enrichFromSourcePages are off by default; enable them only when you need resolved application destinations or additional job details from public employer pages.

Use cases

  • Build job-market and hiring-demand snapshots from public search results.
  • Compare role requirements, experience levels, and compensation ranges.
  • Create recruiting research datasets while retaining each visible application option and the complete expanded description.

Dataset contract

Compensation parsing excludes company asset/valuation figures and prefers explicit salary lines. Source-specific question headings and team/benefit headings keep company background, qualifications and duties separate; certification names require whole-token matches. Employer-prefixed source location labels are preserved separately from the cleaned location. Explicit mixed on-site/remote weekly schedules are classified as hybrid without inventing a remote boolean.

Each row contains values exposed by Google Jobs or, when enrichment is enabled, public source-page structured data. Missing facts are not replaced with invented values. Compatibility aliases include jobTitle/title, employerName/company/companyName, and jobLocation/location.

Available fields cover:

  • Job identity and employer: jobId, jobIdSource, jobIdIsDerived, jobTitle, employerName, companyName, companyDescription, companyWebsite, companyRating, companyReviewCount.
  • Employer overview copy: companyDescription is populated only when the expanded job description has a clearly labeled “About [employer]”, “About Us”, or company-overview section; it is not inferred from unrelated prose.
  • Company review aggregates: companyReviewSummaries retains each supported review platform, visible rating and scale, and the displayed review-count text. Compact counts such as 1.3K keep their source text and are marked estimated when normalized to a number.
  • Search result and location: jobPublisher, sourcePlatform, jobLocation, jobLocationText, jobCity, jobState, jobCountry, locations, and source-provided coordinates.
  • Description: full jobDescription and description, optional cleaned jobDescriptionHtml, a separate 500-character jobDescriptionPreview, and descriptionSections for unclassified sections and notices. The full description is not truncated to the preview length.
  • Description-derived sections: responsibilities/responsibilitiesText, qualifications/qualificationsText, benefits/benefitsList/benefitsHighlightsText, and extracted skills, certifications, and requiredLanguages. Common headings such as “The role entails,” “What we are looking for in you,” and “What we offer colleagues” are classified; role overview, employer overview, hiring tags, requisition labels, and equal-opportunity notices stay in descriptionSections instead of being mixed into requirements or duties.
  • Dates: exact source text in postedAtText (also postedAt and compatibility aliases), postedAtPrecision, postedAtIsEstimated, postedDateEstimated, and postedAtTimestamp. Relative dates are labeled estimated; date-only source values are not given a fabricated midnight timestamp.
  • Compensation: raw salary and salarySourceText, normalized bounds and midpoint (salaryMin, salaryMax, salaryValue), ISO currency, salaryPeriod, and salaryType (employer_stated or estimated) when salary evidence is present. Unsupported placeholders such as unspecified are omitted; a displayed estimate stays labeled as an estimate.
  • Requirements and work: tri-state degreeRequired and isRemote, educationText, educationLevels, experienceRequirements, experienceYears, month bounds, seniorityLevel, and workArrangement (remote, hybrid, on_site, or unknown). experienceYears is emitted only with explicit public wording that supports its numeric bounds; unknown or placeholder bounds are omitted. Unknown booleans remain null rather than being guessed as false.
  • Applications: applyOptions preserves every visible apply choice with its label, platform, original URL, optional resolved URL, destination domain, employer-site assessment, and direct-apply evidence. jobApplyLink is a convenience alias for the first option.
  • Structured source-page facts: when opt-in enrichment finds matching Schema.org data, fields can include requisitionId, department, validThrough, totalJobOpenings, jobStartDate, and workHours.

The following is an illustrative selected-field fragment, not a claim of a live result or a promise that every field is present. The Actor omits facts the source does not expose; sparse listings may have fewer than 20 populated fields.

{
"jobTitle": "Senior Software Engineer",
"title": "Senior Software Engineer",
"employerName": "Example Employer",
"company": "Example Employer",
"companyName": "Example Employer",
"companyDescription": "Example Employer builds tools for distributed engineering teams.",
"companyRating": 3.8,
"companyReviewCount": "12.4K",
"companyReviewSource": "Example review platform",
"companyReviewSummaries": [
{
"platform": "Example review platform",
"rating": 3.8,
"ratingText": "3.8/5",
"ratingScale": 5,
"reviewCount": 12400,
"reviewCountText": "12.4K",
"reviewCountIsEstimated": true
}
],
"jobPublisher": "Example Careers",
"sourcePlatform": "Example Careers",
"jobLocation": "Seattle, WA",
"jobLocationText": "Seattle, WA",
"jobCity": "Seattle",
"jobState": "WA",
"employmentType": "Full-time",
"employmentTypeText": "Full-time",
"postedAtText": "19 hours ago",
"postedAtPrecision": "hour",
"postedAtIsEstimated": true,
"educationText": "No Degree Mentioned",
"educationRequirements": "No Degree Mentioned",
"educationSource": "google_visible",
"degreeRequired": null,
"salary": "$185,000 -$254,000",
"salarySourceText": "For Seattle-based hires: Estimated annual salary of $185,000 -$254,000",
"salaryMin": 185000,
"salaryMax": 254000,
"salaryValue": 219500,
"salaryPeriod": "YEAR",
"salaryType": "estimated",
"workArrangement": "unknown",
"isRemote": null,
"jobApplyIsDirect": true,
"applicationType": "Direct Apply",
"applyPlatforms": "Example Employer Careers",
"applyOptions": [
{
"platform": "Example Employer Careers",
"label": "Apply directly on Example Employer Careers",
"applicationType": "Direct Apply",
"originalUrl": "https://careers.example-employer.com/apply/123",
"resolvedUrl": null,
"destinationDomain": "careers.example-employer.com",
"isEmployerSite": true,
"directApply": true
}
],
"jobApplyLink": "https://careers.example-employer.com/apply/123"
}

Failed searches and access boundaries appear in the run summary and logs rather than as job records.

Run records and exports

The run summary and source-access information are available alongside the dataset in the Output tab.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Input and pagination behavior

startUrls accepts HTTPS Google Jobs search URLs only. When you provide both startUrls and query/queries, the Actor processes the custom URLs first and then the generated searches; they are additive, not overrides. Generated searches receive the location/date/employment/requirements chips. maxItems is a global cap across the run; maxPages is applied separately to each target. In browser mode, each page budget is a bounded scroll/load iteration; in HTTP mode, it is a ten-result offset page. page selects the initial offset.

Records are deduplicated across targets by the Google document ID when present, otherwise by a deterministic hash of title, employer, location, and posting URL. minSalary is an annual lower-bound filter: a record must expose an annual minimum at or above the requested amount. Date and employment filters are sent to Google and checked against extracted values; jobRequirements is a Google search chip, not an independent classification guarantee. directApplyOnly requires both direct-apply evidence and employer/ATS-domain evidence.

Input examples

Basic search:

{
"query": "software engineer",
"location": "Seattle, WA",
"country": "us",
"maxItems": 10,
"maxPages": 2
}

Salary, employment, and experience filters (arrays are accepted through the API):

{
"query": "backend engineer",
"minSalary": 120000,
"employmentTypes": ["FULLTIME", "CONTRACTOR"],
"jobRequirements": ["more_than_3_years_experience"],
"datePosted": "week",
"maxItems": 25
}

Multiple custom Google Jobs sources:

{
"startUrls": [
{ "url": "https://www.google.com/search?udm=8&q=software+engineer" },
{ "url": "https://www.google.com/search?udm=8&q=data+analyst" }
],
"maxItems": 40,
"maxPages": 3
}

Use HTTP instead of headless browser extraction, and omit description HTML:

{
"query": "data analyst",
"page": 2,
"maxPages": 1,
"maxItems": 10,
"useBrowser": false,
"includeDescriptionHtml": false
}

Optional application-link resolution and source-page enrichment are disabled by default. When enabled, maxSourcePagesPerJob controls how many public source pages are checked per job (default 1, maximum 3).

Input reference

FieldType and defaultBehavior
query, queriesstring, arraySingle search term plus up to 50 batch terms; terms are trimmed and bounded.
startUrlsarray of { "url": "..." }Up to 50 HTTPS Google Jobs search URLs; processed before generated queries.
location, country, languagestrings; language defaults to enLocation is added to generated searches; country/language become Google search parameters.
datePostedenum, defaults to allall, today, 3days, week, or month.
workFromHomeboolean, defaults to falseAdds a remote search term and excludes extracted records not classified remote.
employmentTypes, jobRequirementsstring in the form; API also accepts arraysAdds Google Jobs filter chips; see the Input tab for allowed values.
page, maxItems, maxPagesintegers; defaults 1, 50, 10Page starts at 1; item cap is global; page/scroll budget applies per target.
minSalaryinteger, optionalAnnual minimum compensation floor; records without an annual lower bound do not pass.
directApplyOnlyboolean, defaults to falseRequires both direct-apply evidence and employer/ATS destination evidence.
useBrowserboolean, defaults to trueBrowser mode expands detail panes; HTTP mode uses Google’s ten-result offset parameter.
includeDescriptionHtmlboolean, defaults to trueSet to false to omit the HTML description while retaining clean text.
proxyConfigurationobject, optionalUsed by browser mode only; ignored with a warning in HTTP mode.
resolveApplyUrls, enrichFromSourcePagesbooleans, defaults to falseOpt-in external URL resolution and matching JobPosting JSON-LD enrichment.
maxSourcePagesPerJobinteger, defaults to 1, range 1–3Maximum destination pages attempted for enrichment when enabled.

There is no sorting input. These controls affect search construction, filtering, output selection, or optional enrichment as described above; they do not create fields that the source did not provide.

How to scrape Google Jobs

  1. Open this Actor's Input tab and enter a role in query, or provide Google Jobs search pages in startUrls.
  2. Add an optional location, country, date, employment, experience, or salary filter.
  3. Start with a modest maxItems and maxPages; keep browser mode enabled when expanded job descriptions are important.
  4. Run the Actor, review the dataset and run summary, then export or integrate the dataset through the Actor API tab.

Use Apify scheduling, run history, and integrations for repeated public snapshots. Results depend on the visible Google Jobs page, region, query, and access availability.

Run sizing, cost, and support

Browser extraction is enabled by default because job details expand dynamically. More targets, pages/scroll iterations, and results consume more compute; browser mode is generally heavier than HTTP mode. Optional application-link resolution and source-page enrichment add bounded network requests. No fixed run-cost estimate is provided because resource use depends on the input and the Apify plan.

The Actor returns only fields visible in Google Jobs or found in explicitly enabled, identity-matched source-page structured data. Listings and fields vary by query, region, and access availability; the Actor does not bypass CAPTCHA or other access boundaries. Use the data in accordance with Google and destination-site terms and applicable privacy requirements.

This Actor is not affiliated with Google or any employer or job publisher. Use public information responsibly and follow Google/destination-site terms, applicable rate limits, privacy rules, and law. Listings may contain personal information published by employers; do not use it without a lawful basis. For support, use this Actor's Apify Issues tab and include a run ID, sanitized input, and relevant log excerpts. Use the API tab for programmatic integrations; never share tokens or cookies in an issue. On an access boundary, the Actor stops without adding an error job. An empty dataset can mean no visible matching cards or restricted access, not that Google has no such jobs.