Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
BuiltIn Jobs Scraper icon

BuiltIn Jobs Scraper

Scrape Built In tech jobs at $0.81/1,000 - salary, location, skills, posted date. No login or API key. 1,000 jobs in under 2 minutes.

29 runs on Apify $0.00081 per job ($0.81 / 1,000)
Run this in the cloudRun on Apify →

Job Market Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQueries, location, searchRadius (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00081 per job = $0.81 per 1,000

You are charged forWhenPrice
Job returnedCharged once per genuine Built In job row: title, company, locations, remote/hybrid flag, salary range when Built In publishes one, seniority, posted date, industries and skills. Sample rows, diagnostics and empty runs are never charged.$0.00081
Actor StartCharged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.001

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-07, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchQueriesJob titles or keywords to search on Built In, one per line. Example: "data engineer", "product manager". Leave empty if you only want the filters below, or only the URLs.array
locationCity or region, in plain text: "Austin, TX", "New York", "Chicago". Resolved through Built In's own location lookup. Leave empty to search every Built In location.string
searchRadiusHow far around the location to look. Ignored when no location is set.string
remotePreferenceRestrict to one working style. "Any" returns all of them and still tells you which each job is.string
categoryBuilt In's own job category.string
experienceLevelSeniority band as Built In labels it.string
postedWithinDaysOnly jobs published in the last N days.string
maxItemsHard cap on rows returned across every search and URL (1-10000). You are charged per job returned.integer
startUrlsOptional. Paste single job pages (https://builtin.com/job/lead-data-engineer/10586279), board pages (https://builtin.com/jobs/remote/engineering), a company's board (https://builtin.com/company/crowdstrike/jobs) or a city site (https://builtinnyc.com/jobs). Works alongside the fields above.array
includeJobDescriptionOff by default. When on, the actor opens each job's own page to add the full description text and HTML, employment type, benefits and the closing date. This makes the run slower because it is one extra request per job. The price per job does not change.boolean

What you get

A structured dataset — each result includes fields like:

titlecompanyNamelocationworkplaceTypesalaryTextexperienceLevelpostedAtjobUrlcompanyLogojobId

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Job Market Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Dice Jobs Scraper iconJob Market Scrapers

Dice Jobs Scraper

Dice jobs scraper at $0.90 per 1,000 jobs plus a $0.001 run start. Companies, locations, posting dates, apply URLs and full descriptions. No login needed.

Ready to run — no setup

SEEK Jobs Scraper iconJob Market Scrapers

SEEK Jobs Scraper

SEEK jobs scraper at $0.81 per 1,000, flat at every volume. Australia and New Zealand, with salary ranges, workplace type and full descriptions. No login.

Ready to run — no setup

Career Site Jobs Scraper iconJob Market Scrapers

Career Site Jobs Scraper

Scrape open jobs from any company career page. Auto-detects the ATS across 10 platforms and returns title, location, department, type.

Ready to run — no setup

Internshala Scraper iconJob Market Scrapers

Internshala Scraper

Scrape Internshala internships and fresher jobs by keyword, city, category, stipend or work-from-home.

Ready to run — no setup

XING Jobs Scraper iconJob Market Scrapers

XING Jobs Scraper

Scrape XING jobs in Germany, Austria and Switzerland by keyword, city, remote or hybrid.

Ready to run — no setup

ZipRecruiter Scraper iconJob Market Scrapers

ZipRecruiter Scraper

Scrape ZipRecruiter jobs by keyword, city, remote, employment type, salary or posting age.

Ready to run — no setup

See all Job Market Scrapers →

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.