BuiltIn Jobs Scraper API avatar

BuiltIn Jobs Scraper API

Pricing

from $0.81 / 1,000 job returneds

Go to Apify Store
BuiltIn Jobs Scraper API

BuiltIn Jobs Scraper API

Lowest price on the market for Built In jobs: $0.81 per 1,000, under every established Built In scraper (the rest start at $0.95). Search any board or a whole company for title, company, all locations, workplace type, salary, seniority, skills and the exact posted date. No login.

Pricing

from $0.81 / 1,000 job returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Built In Jobs Scraper API

Pulls tech job listings out of Built In — the US/Canada startup and tech job board behind builtin.com, builtinnyc.com, builtinchicago.org, builtinaustin.com and the rest of the city sites.

Give it a search term, a location, or just a URL. You get one row per job: title, company, every location the role is open in, remote/hybrid/on-site, the posted salary range, seniority, the exact publish timestamp, industries, the tech stack listed on the card, and a one-paragraph summary.

$0.81 per 1,000 jobs ($0.00081 each), plus $0.001 each time a run starts — the lowest per-job price of any Built In jobs scraper on the Apify Store with an active user base. The next cheapest, solidcode/builtin-scraper (46 monthly users), is $0.95 per 1,000 even on its cheapest volume tier; the others charge $0.99, $1.00, $1.50, $2.99 and $3.50 per 1,000. (One brand-new listing with 5 users is priced lower; it has no track record yet.)

What a row looks like

{
"jobId": "9546563",
"title": "Principal Data Engineer, LLM/AI Platforms (Remote)",
"companyName": "CrowdStrike",
"companySlug": "crowdstrike",
"companyUrl": "https://builtin.com/company/crowdstrike",
"companyLogo": "https://static.builtin.com/cdn-cgi/image/.../Red%20Feather%20Icon%20White%20Background.png",
"jobUrl": "https://builtin.com/job/principal-data-engineer-llm-ai-platforms-remote/9546563",
"location": "USA",
"locations": ["USA", "ON, CAN", "NS, CAN", "AB, CAN", "MB, CAN", "NB, CAN", "BC, CAN"],
"locationCount": 7,
"workplaceType": "Remote or Hybrid",
"isRemote": true,
"isHybrid": true,
"isOnsite": false,
"salaryText": "195K-320K Annually",
"salaryMin": 195000,
"salaryMax": 320000,
"salaryPeriod": "year",
"experienceLevel": "Expert/Leader",
"postedAt": "2026-08-04T00:12:50.000Z",
"postedLabel": "Reposted 3 Days Ago",
"isFeatured": false,
"industries": ["Cloud", "Computer Vision", "Information Technology", "Sales", "Security", "Cybersecurity"],
"skills": ["Airflow", "AWS", "BigQuery", "Docker", "Kafka", "Kubernetes", "Python", "Snowflake", "Spark"],
"summary": "As a Principal Data Engineer, you will design and implement LLM, AI-powered security data platforms, mentor engineers, and drive the adoption of data solutions across teams.",
"employmentType": null,
"validThrough": null,
"benefits": [],
"descriptionHtml": null,
"descriptionText": null,
"searchQuery": "data engineer",
"searchUrl": "https://builtin.com/jobs?search=data+engineer",
"page": 1,
"position": 1,
"scrapedAt": "2026-08-07T22:10:00.000Z"
}

postedAt is the real publish timestamp Built In records for the listing, not a guess parsed from "3 Days Ago". postedLabel keeps the human string in case you want it. On the rare page template that omits the exact timestamp, postedAt falls back to the relative label.

The last five fields — employmentType, validThrough, benefits, descriptionHtml, descriptionText — stay null unless you turn on Include the full job description or paste a job URL directly. See below.

Input

{
"searchQueries": ["data engineer", "product manager"],
"location": "Austin, TX",
"remotePreference": "remote",
"maxItems": 200
}
FieldWhat it does
searchQueriesOne search term per line.
locationPlain text — Austin, TX, New York, Chicago. Resolved through Built In's own location lookup. Empty means every location.
searchRadius5mi to 100mi around that location.
remotePreferenceremote, hybrid, office, or blank for all.
categoryBuilt In's own categories: engineering, data-analytics, product, designer, sales, and so on.
experienceLevelinternship, entry-level, junior, mid-level, senior, expert-leader.
postedWithinDays1, 3, 7 or 30.
startUrlsPaste Built In pages directly. See the next section.
includeJobDescriptionOff by default. Adds the full posting text at no extra charge per job.
maxItemsHard cap on rows, 1–10000. You are charged per row returned.

Run it with no input at all and it returns a single labelled sample row so you can see the shape. That row carries no per-job charge — the run costs only the $0.001 start fee.

URLs you can paste

URLWhat you get
https://builtin.com/job/lead-data-engineer/10586279That one job, with the full description. summary and skills are card-only fields and stay empty on this route
https://builtin.com/jobs?search=product+managerEverything that search returns
https://builtin.com/jobs/remote/engineeringEvery remote engineering role
https://builtin.com/company/crowdstrike/jobsOne company's whole board
https://builtinnyc.com/jobsA city site's board

Filters that Built In puts in the path — /remote, /hybrid, /office, /senior, /entry-level, category names — are all understood, so if you can build the view in your browser you can paste it here.

Full descriptions

includeJobDescription: true opens each job's own page and adds descriptionText (plain text, typically 6,000–10,000 characters), descriptionHtml, employmentType (FULL_TIME, PART_TIME, INTERN, CONTRACTOR), validThrough (the date Built In will close the listing), and benefits — Built In publishes a long, unusually specific benefits list, 60+ entries for a large employer.

It is one extra HTTP request per job, eight at a time. A 100-job run went from about 11 seconds to 26. Descriptions came back on 100/100 jobs in that run, 4,248 to 13,409 characters each, median 6,427. The price per job does not change.

How much you get back

Built In serves 25 job cards per request when you give it a search term, and 45–65 when you only use filters. Real runs on Apify, 1 GB:

RunRowsWall clock
data engineer, Austin TX54.3 s
software engineer, nationwide30032 s
engineer, nationwide1000103 s
product manager, New York, with full descriptions10026 s
Mixed URLs: one job page, CrowdStrike's board, builtinnyc.com remote8012 s

Deep paging works to page 1000, so one broad board is good for roughly 25,000 rows before it runs out. A narrow search stops when the search does.

Field coverage

Measured on 1,455 unique jobs from the runs above:

FieldPresent
jobId, title, companyName, companyUrl, companyLogo, jobUrl, location, postedAt, industries1455 / 1455
workplaceType, experienceLevel, summary1454 / 1455
skills1387 / 1455 (95%)
salaryText723 / 1455 (50%)

Read that salary number before you buy. Built In shows a pay range only when the employer published one, and across a broad sample that is about half of all listings. Coverage swings hard by search: 97% on Chicago data-scientist roles, 81% on New York product managers, 46% on a nationwide engineer sweep, 23% on one large company's global board. No scraper can produce the missing ones — the number is not on the page. Rows without a range carry salaryText: null rather than a guess.

What this does not do

  • It does not invent salaries. See above. There is also no currency on the card — Built In prints 118K-152K Annually for a Toronto job the same way it does for a Boston one — so this actor does not emit a currency field rather than assume USD. salaryPeriod is year or hour; hourly is rare (8 of 659 in the sample).
  • It does not scrape applicant or recruiter contact details. Built In does not publish them.
  • It is mostly US and Canada. That is Built In's own coverage. Company boards do carry the occasional Dublin or Singapore role, but if Europe or Asia is your main target this is the wrong source.
  • It does not log in. Saved jobs, job alerts and anything behind a Built In account are out of reach.
  • It does not follow the "Apply" link out to the employer's ATS. jobUrl is the Built In page.

Technique

builtin.com is a server-rendered ASP.NET app. Its job board calls itself back with ?handler=SearchResults, which returns just the results fragment — every card fully rendered, with a machine-readable analytics payload at the bottom listing each job id and its exact publish timestamp. This actor reads that fragment directly. No headless browser, no per-job request on the default path, and nothing that needs an API key.

Requests carry a real Chrome TLS fingerprint (via impit) over a static-ISP address pool. Plain Node fetch is a different thing entirely to a CDN and gets treated as such.

Reliability

Every failure produces a labelled, uncharged diagnostic row instead of a silent empty dataset: BAD_URL, LOCATION_NOT_FOUND, NO_RESULTS, JOB_NOT_FOUND, HTTP_ERROR. You are charged once per real job row and never for a failed or empty one; a run that returns nothing costs only the $0.001 start fee.

FAQ

Is there an official Built In API? No. Built In publishes no public jobs API. This actor reads the same results fragment the site's own front end reads.

Does it return the salary? Yes, when Built In shows one — as salaryText ("195K-320K Annually") plus parsed salaryMin, salaryMax and salaryPeriod (year or hour). That was 723 of 1,455 jobs (50%) in our measured sample. The rest are null, because the employer did not publish a range.

Can I get the full job description? Yes. Set includeJobDescription: true, or paste the job's URL into startUrls. Both give you descriptionText and descriptionHtml, and neither costs extra.

Can I filter to remote jobs only? Yes — set remotePreference to remote. Every row also carries workplaceType, isRemote, isHybrid and isOnsite, so you can filter afterwards too. Built In's own values are Remote, Hybrid, In-Office, Remote or Hybrid and In-Office or Remote.

Can I scrape one company's jobs? Yes. Paste https://builtin.com/company/<slug>/jobs into startUrls. Built In's own company page stops at 20 jobs and does not paginate; this actor resolves the company id behind it and reads the main board filtered to that employer instead, which pages properly. CrowdStrike returned 200+ that way against the company page's 20.

Do the city sites work? Yes. builtinnyc.com, builtinchicago.org, builtinaustin.com, builtinla.com, builtinboston.com, builtinsf.com, builtincolorado.com, builtinseattle.com — paste any of their /jobs URLs. Or just set location on builtin.com, which covers the same ground.

How many jobs can I get in one run? maxItems goes to 10,000. Built In stops paginating at page 1000, so a single broad board tops out somewhere around 25,000 rows. Split by category, city or keyword to go wider.

How do I run it daily? Schedule it in Apify and set postedWithinDays to 1. You then only pay for jobs posted since yesterday.

How much does it cost? $0.81 per 1,000 jobs, plus a $0.001 start fee per run. A 500-job run costs about $0.41.