Built In Jobs Scraper avatar

Built In Jobs Scraper

Pricing

from $0.48 / 1,000 job listing extracteds

Go to Apify Store
Built In Jobs Scraper

Built In Jobs Scraper

Search Built In jobs by keyword, location, employer, category, or URL and export normalized vacancy records with salary, dates, descriptions, and application links.

Pricing

from $0.48 / 1,000 job listing extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract built in jobs into a clean dataset for recruiting research, hiring-market analysis, and recurring vacancy monitoring. Search Built In by keyword, location, company, category, or a real Built In URL, then receive one normalized record per public job posting.

The Actor follows Built In's server-rendered job search and structured posting data. It returns stable job IDs, titles, employers, locations, salary metadata, dates, full descriptions, and application URLs without requiring a browser or login.

What can you do with this Built In jobs scraper?

  • Search Built In for roles such as software engineer or data engineer.
  • Resolve a city or region through Built In's own public location search.
  • Resolve an employer name to Built In's company filter.
  • Process a Built In category, filtered search URL, or individual job URL.
  • Build scheduled snapshots for vacancy and hiring-market monitoring.
  • Export current records to JSON, CSV, Excel, Google Sheets, a database, or another workflow.
  • Use stable job IDs and canonical URLs to compare runs in your own pipeline.

This Actor returns current public records. It does not send alerts or maintain a historical database by itself; use an Apify Schedule and compare datasets downstream for those workflows.

Who is this Actor for?

Recruiters and talent teams

Build focused candidate-market and employer-vacancy feeds without manually copying Built In careers pages.

Labor-market analysts

Collect consistent job identity, location, employer, salary, and posting-date fields for trend analysis.

Sales and lead researchers

Track organizations that are actively hiring for relevant technologies or functions.

Data engineers

Feed normalized Built In job records into a warehouse, spreadsheet, webhook, or recurring ETL job.

Job-board and career-product teams

Research current public vacancy supply while retaining the canonical source and application links.

Why use this Actor?

  • Search and source URLs: start from structured filters or a Built In URL.
  • Full job details: detail pages provide richer fields than listing cards alone.
  • Typed output: salary numbers, dates, arrays, nulls, and URLs have predictable types.
  • Location and company resolution: user-friendly names are translated to Built In's supported search filters.
  • Bounded pagination: maxItems stops discovery and detail fetching at the requested limit.
  • No paid proxy fallback: the current implementation uses direct public HTTP only.
  • Pay per result: only validated jobs saved to the dataset trigger the item event.

What Built In job data is extracted?

FieldTypeDescription
jobIdstringStable Built In job ID
titlestringPublished job title
companystringHiring employer
companyUrlstring or nullEmployer profile or website URL
locationstringReadable combined location
locationsarrayStructured city, region, and country values
workplaceTypestring or nullRemote marker when structured data provides it
employmentTypearrayValues such as FULL_TIME
salaryMinnumber or nullPublished salary minimum
salaryMaxnumber or nullPublished salary maximum
salaryCurrencystring or nullCurrency code, such as USD
salaryPeriodstring or nullPeriod, such as YEAR or HOUR
datePostedstring or nullSource posting date
validThroughstring or nullSource expiry timestamp
descriptionstring or nullNormalized full description when enabled
skillsarrayStructured skills when published
industriesarrayPublished industry labels
applyUrlstring or nullPublic direct application URL when available
urlstringCanonical Built In posting URL
scrapedAtstringUTC extraction timestamp

Source fields that are not published remain null or an empty array. The Actor does not infer missing salary, work mode, skills, or expiry values.

How to scrape Built In jobs

  1. Open the Actor in Apify Console.
  2. Enter a query, such as software engineer.
  3. Optionally add location, company, or a Built In category slug.
  4. Alternatively, paste one or more Built In job or search URLs into startUrls.
  5. Choose maxItems and whether full descriptions should be included.
  6. Click Start.
  7. Open the Dataset tab to inspect or export the results.

A useful first run is:

{
"query": "software engineer",
"maxItems": 25,
"includeDescription": true
}

Input parameters

InputTypeDefaultMeaning
startUrlsarrayemptyBuilt In /jobs search/category URLs or /job/... detail URLs
querystringemptyTitle, skill, or keyword search
locationstringemptyCity or region resolved through Built In, for example New York, NY
companystringemptyEmployer resolved through Built In, for example Smartly
categorystringemptyBuilt In category slug, such as developer-engineer
maxItemsinteger100Maximum records, from 1 to 5,000
includeDescriptionbooleantrueInclude normalized full descriptions
maxRequestRetriesinteger2Retries for temporary network, 429, or server errors

Provide startUrls or at least one search filter. Only builtin.com URLs are accepted. Filters supplied alongside a listing URL are applied to that listing search. Filters supplied with an individual job URL are checked against the extracted record.

Search by location

Use the place a Built In visitor would recognize:

{
"query": "data engineer",
"location": "New York, NY",
"maxItems": 50
}

The Actor asks Built In's public location autocomplete for matches and uses the exact text match when available. Otherwise it uses the first result. An unrecognized location fails clearly instead of silently returning an unrelated global search.

Search by company

{
"company": "Smartly",
"maxItems": 25,
"includeDescription": false
}

The Actor prefers an exact employer-name match. When there is no exact result, it uses Built In's first company-search result. Be specific when several employers have similar names.

Scrape a Built In URL

Use a filtered page or individual posting:

{
"startUrls": [
{ "url": "https://builtin.com/jobs/remote" }
],
"maxItems": 20,
"includeDescription": false
}

For an individual job URL, the Actor emits at most one record and still applies any provided query, company, or location scope.

Output example

A current result has this shape:

{
"jobId": "9354553",
"title": "C++ Market Data Engineer",
"company": "Citadel Securities",
"companyUrl": "https://builtin.com/company/citadel-securities",
"location": "Miami, Florida, USA / New York, New York, USA",
"locations": [
{ "city": "Miami", "region": "Florida", "country": "USA" },
{ "city": "New York", "region": "New York", "country": "USA" }
],
"workplaceType": null,
"employmentType": ["FULL_TIME"],
"salaryMin": 125000,
"salaryMax": 350000,
"salaryCurrency": "USD",
"salaryPeriod": "YEAR",
"datePosted": "2026-08-24",
"validThrough": "2026-09-23T00:18:40+00:00",
"description": "Job Description About the Role ...",
"skills": [],
"industries": ["Information Technology", "Software", "Financial Services"],
"applyUrl": "https://www.citadelsecurities.com/careers/details/c-market-data-engineer/",
"url": "https://builtin.com/job/c-market-data-engineer/9354553",
"scrapedAt": "2026-08-24T06:09:32.620Z"
}

The record is illustrative of real current output. Listings change and may omit optional fields.

How much does it cost to extract Built In job listings?

The Actor uses pay-per-event pricing:

  • a $0.005 start event once per run;
  • an item event for each validated job saved to the dataset;
  • no item charge for duplicate, invalid, filtered-out, or failed records.

The BRONZE item price is $0.0008 per job, with lower per-item prices on higher Apify tiers. At that tier, 10 jobs cost about $0.013, 100 jobs about $0.085, and 1,000 jobs about $0.805, before any platform-specific taxes or plan effects.

These examples combine the start and item events. Check the pricing panel for the active tier that applies to your Apify account.

Monitoring new and changed Built In jobs

  1. Save a focused Actor input.
  2. Create an Apify Schedule for the desired interval.
  3. Use jobId or url as the stable comparison key.
  4. Store the previous result set in your own database or key-value record.
  5. Compare fields such as datePosted, validThrough, salary, or description.
  6. Send new or changed records through a webhook, Make, Zapier, or another Actor.

Each run is a current snapshot. The Actor does not claim that Built In retains historical versions of a listing.

Export Built In jobs to a spreadsheet or pipeline

The default dataset can be downloaded as JSON, CSV, Excel, XML, or RSS from Apify Console. For recurring ETL:

  • call the Actor through the API;
  • wait for the run to finish;
  • fetch defaultDatasetId;
  • request the dataset in the format your destination accepts;
  • deduplicate on jobId in the destination.

Optional nested arrays are easiest to preserve in JSON. CSV and spreadsheet exports may serialize arrays into cells.

Run with the Apify API

Replace APIFY_TOKEN with your token in a secure environment variable. Do not put tokens in source control.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~builtin-job-listings-scraper/runs?waitForFinish=300" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"software engineer","location":"New York, NY","maxItems":25}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/builtin-job-listings-scraper').call({
query: 'data engineer',
location: 'New York, NY',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/builtin-job-listings-scraper').call(run_input={
'query': 'software engineer',
'maxItems': 25,
'includeDescription': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/builtin-job-listings-scraper"

Use this same JSON configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/builtin-job-listings-scraper"
}
}
}

Example prompts:

  • “Run the Built In Jobs Scraper for 25 data engineer jobs in New York and summarize the employers.”
  • “Extract 20 remote Built In jobs without descriptions and return a CSV-ready table.”
  • “Collect current software engineer jobs and group the output by salary currency.”

Integrations

Apify Schedules

Run the same search daily or weekly for consistent hiring snapshots.

Webhooks

Notify a service when the run succeeds, then fetch and compare its dataset.

Google Sheets

Export a bounded result set for collaborative recruiting or market research.

Make and Zapier

Trigger downstream enrichment, routing, or notification workflows after a successful run.

Warehouses and databases

Load typed JSON into BigQuery, Snowflake, PostgreSQL, or another analytics store and deduplicate on jobId.

Reliability, retries, and failure behavior

The Actor retries only temporary network failures, rate limits, and selected 5xx responses with bounded backoff. It does not blindly retry malformed inputs, unsupported URLs, or deterministic 4xx responses.

A listing page with no cards ends pagination normally. A detail page that no longer contains a valid JobPosting record is skipped and not charged. If every requested route is invalid or a required filter cannot be resolved, the run fails with a non-zero status.

The source can change its HTML, public endpoints, filters, or structured data. Review failed-run logs before rerunning a large task.

Tips and limitations

  • Start with a small maxItems while validating a new search.
  • Use specific location text when autocomplete could return several places.
  • Use an exact company name when possible.
  • Turn off includeDescription when descriptions are not needed in downstream output; detail pages are still fetched for normalized metadata.
  • Category values are Built In URL slugs, not arbitrary labels.
  • Salary and workplace fields are returned only when the source publishes them.
  • Built In search ranking can change between runs.
  • Direct HTTP is currently sufficient; there is no configurable or automatic residential proxy mode.
  • The Actor extracts public listings and does not bypass login, CAPTCHA, or private application systems.

Use the Actor only for lawful purposes and respect Built In's terms, robots guidance, intellectual-property rights, privacy requirements, and applicable employment-data rules. Public availability does not remove contractual or regulatory obligations.

Avoid republishing full descriptions without permission. Do not use the output for unlawful discrimination, unsolicited spam, or decisions that require protected personal information. Keep request volume proportionate, retain source URLs, and apply appropriate retention and security controls.

You are responsible for deciding whether your use case and jurisdiction permit collection and downstream processing.

Frequently asked questions

Does the Actor require a Built In account?

No. It extracts public job search and detail pages and does not log in.

Can it search remote jobs?

Yes. Supply https://builtin.com/jobs/remote in startUrls, or use another real Built In filtered URL.

Can it monitor changes automatically?

Use an Apify Schedule to create recurring snapshots, then compare records by jobId in your workflow. The Actor itself does not store historical versions or send alerts.

Why is salary null for some jobs?

Built In or the employer did not publish structured salary data for that posting. The Actor does not estimate missing salary.

Why did my company or location resolve unexpectedly?

Built In may return several similarly named matches. Use the exact public company name and a specific city/region string. The Actor prefers an exact match and otherwise uses the first Built In result.

Why did a run return fewer jobs than maxItems?

maxItems is a ceiling, not a guarantee. The search can have fewer current listings, duplicate URLs, removed details, or records that do not match filters on a supplied direct job URL.

What happens when a job expires during a run?

If the detail no longer exposes a valid JobPosting record, it is skipped and no item event is charged.

Use this Actor when Built In is the required source; use the related Actors when you need a different job-board or employer-career-page workflow.