BuiltIn Jobs Scraper avatar

BuiltIn Jobs Scraper

Pricing

from $0.78 / 1,000 jobs

Go to Apify Store
BuiltIn Jobs Scraper

BuiltIn Jobs Scraper

Scrape Built In tech jobs by keyword, city, filters or URL, including a company's whole board. Each row has the title, company, every location, remote or hybrid, seniority, skills and the exact posted time. About half carry a pay range, never a guessed one. No login. $0.81 per 1,000 jobs.

Pricing

from $0.78 / 1,000 jobs

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

6 days ago

Last modified

Share

Scrape Built In tech jobs by search, city, filters or a pasted URL, with no login: one row per job with the title, company, every location the role is open in, remote or hybrid or on site, seniority, the skills on the card, industries and the exact posted timestamp.

Built In publishes a pay range on about half its listings, because that is how many employers filled one in. Rows without one come back as null rather than a guess.

InputSearch terms, a location, Built In filters, or Built In URLs
OutputOne row per job: title, company, locations, workplace type, seniority, skills, the pay range when published, the exact posted time
Ceiling10,000 jobs per run
Account neededNone, and no API key
Price$0.81 per 1,000 jobs, flat on every plan. The free plan's $5 a month covers about 6,100

🔍 What Built In Jobs Scraper does

There is nothing to log into and no key to apply for. Search by keyword, narrow by city, category, seniority, working style and how recently a job was posted, or skip the fields entirely and paste URLs.

The URL route takes a single job page, a filtered board view, a city site like builtinnyc.com, or a company's board. Paste it here and you get the company's whole board.

Every search and every URL shares one maxItems, and a job two searches both find is kept once.

📋 What data you get from each Built In job

What you getField
Built In's job id, the job pagejobId, jobUrl
Title, company, its Built In page and logotitle, companyName, companySlug, companyUrl, companyLogo
Every location the role is open inlocation, locations, locationCount
Remote, hybrid or on site, as a label and as three flagsworkplaceType, isRemote, isHybrid, isOnsite
The pay range as Built In prints it, and parsedsalaryText, salaryMin, salaryMax, salaryPeriod
Seniority, industries and the skills on the cardexperienceLevel, industries, skills
The exact posted time and Built In's relative labelpostedAt, postedLabel
The card's short summary, and whether the job was featuredsummary, isFeatured
With full descriptions on: the text, employment type, benefits and closing datedescriptionHtml, descriptionText, employmentType, benefits, validThrough
Where the row came fromsearchQuery, searchUrl, page, position, scrapedAt

▶️ How to scrape Built In jobs

  1. Open Built In Jobs Scraper and click Try for free.
  2. Type one or more terms into Search terms, or paste Built In pages into Built In URLs.
  3. Set Location, Job category, Experience level and Posted within if you want them.
  4. Set Maximum jobs. Start around 50 to see the output shape, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

Run it with nothing filled in and you get one labelled sample row, free.

💰 How much does it cost to scrape Built In jobs?

$0.81 per 1,000 jobs. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 6,100 jobs.

You pay per job row delivered. The sample row and diagnostic rows carry no job charge, and a search that matches nothing writes a free diagnostic row instead of jobs. Turning on the full job description costs nothing extra per job.

📥 What you give it

{
"searchQueries": ["data engineer", "product manager"],
"location": "Austin, TX",
"remotePreference": "remote",
"maxItems": 200
}
FieldDefaultWhat it is
searchQueriesnone, the box starts with data engineerJob titles or keywords, one per line. Leave it empty if you only want the filters, or only the URLs.
locationnonePlain text: Austin, TX, New York, Chicago. Resolved through Built In's own location lookup. Empty searches every location.
searchRadiusBuilt In's own5mi, 10mi, 25mi, 50mi or 100mi around that location. Ignored when no location is set.
remotePreferenceanyremote, hybrid or office. Any still tells you which each job is.
categoryanyBuilt In's own categories: engineering, data-analytics, product, designer, sales, marketing and the rest.
experienceLevelanyinternship, entry-level, junior, mid-level, senior, expert-leader.
postedWithinDaysany time1, 3, 7 or 30.
maxItems50Hard cap on rows across every search and URL, 1 to 10,000.
startUrlsnoneBuilt In pages pasted directly. See the table below.
includeJobDescriptionoffOpens each job's own page for the full text, employment type, benefits and closing date.
proxyConfigurationnoneOptional. Only touch it if the run has to leave through your own servers.

URLs you can paste into startUrls:

URLWhat comes back
https://builtin.com/job/lead-data-engineer/10586279That one job, with the full description
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

If location does not resolve, the run stops there. It writes one row saying so and does no further work, even when you also gave startUrls. Use a plain City, ST or City, Country spelling, or leave the field empty.

includeJobDescription holds the run's rows until the last description arrives. One extra request per job, so a very large maxItems on that path asks a lot of the run. Keep it to a few hundred at a time. The price per job does not change.

📤 What you get back

A real row from a run on 20 September 2026, with the logo URL trimmed:

{
"jobId": "11269166",
"title": "Data Engineer 4",
"companyName": "Comcast",
"companySlug": "comcast-3",
"companyUrl": "https://builtin.com/company/comcast-3",
"companyLogo": "https://static.builtin.com/cdn-cgi/image/f=auto,fit=scale-down,w=128,h=128/...",
"jobUrl": "https://builtin.com/job/data-engineer-4/11269166",
"location": "Chennai, Tamil Nadu, IND",
"locations": ["Chennai, Tamil Nadu, IND"],
"locationCount": 1,
"workplaceType": "Hybrid",
"isRemote": false,
"isHybrid": true,
"isOnsite": false,
"salaryText": null,
"salaryMin": null,
"salaryMax": null,
"salaryPeriod": null,
"experienceLevel": "Senior level",
"postedAt": "2026-09-20T03:29:01.000Z",
"postedLabel": "3 Hours Ago",
"isFeatured": false,
"industries": ["Digital Media", "Information Technology", "News + Entertainment"],
"skills": ["APIs", "Databricks", "Kubernetes", "Teradata"],
"summary": "Develop and maintain advanced data structures, ingestion frameworks, pipelines, and quality controls across structured and unstructured data environments...",
"employmentType": null,
"validThrough": null,
"benefits": [],
"descriptionHtml": null,
"descriptionText": null,
"searchQuery": "data engineer",
"searchUrl": "https://builtin.com/jobs?search=data+engineer&allLocations=true",
"page": 1,
"position": 1,
"scrapedAt": "2026-09-20T07:02:01.834Z"
}
FieldHow to read it
jobIdStable. Use it as your dedupe key across runs.
salaryTextBuilt In's own wording, like 195K-320K Annually, with salaryMin, salaryMax and salaryPeriod parsed out of it. All four are null when the employer published no range.
locations, locationCountEvery location the role is open in. location holds the first.
workplaceTypeBuilt In's label: Remote, Hybrid, In-Office, Remote or Hybrid, In-Office or Remote. The three flags next to it say the same thing in a form you can filter on.
postedAtThe exact publish timestamp. Falls back to the relative label on the rare page that omits it.
skills, summaryCome from the board card. Paste a single job URL instead and these two are empty, because that page has no card.
descriptionHtml, descriptionText, employmentType, validThrough, benefitsnull or empty unless you switch on includeJobDescription or paste a job URL.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A jobIt has a jobId and neither flag belowyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

A real job row carries no charged field at all, so filter on _sample and _diagnostic being absent.

CodeWhat it means
BAD_URLThat URL is not a Built In job, board or company page.
COMPANY_NOT_FOUNDThe company slug in the URL did not resolve. Check it on builtin.com.
LOCATION_NOT_FOUNDBuilt In's lookup has no match for that place name.
LOCATION_LOOKUP_FAILEDThe lookup itself did not answer. Re-run it.
JOB_NOT_FOUNDBuilt In removes a job page once the listing closes.
NO_RESULTSThe search ran and matched nothing. Try a broader term or widen the date window.
HTTP_ERRORBuilt In was unreachable or answered badly on that request.
TIME_LIMITThe run stopped just before its time limit. The jobs delivered are kept and charged. Give it more time, or ask for fewer jobs, to get the rest.

One bad URL never stops the others, and a diagnostic row never fails the run. The one exception is a location that will not resolve, which ends the run as described above. A run whose time limit stopped it before any job came back ends as failed too, with the TIME_LIMIT row saying so. With full descriptions on, a job whose description had not been read by then is left out and not charged.

💡 What people use it for

  • Watching one city and one category daily with postedWithinDays set to 1, so each run only picks up what is new.
  • Pulling a competitor's whole open board by pasting their Built In company URL.
  • Building a pay benchmark for a role from the listings that do publish a range, and counting how many do not.
  • Tracking which tools keep appearing in skills across a few hundred listings in one category.

🚧 What it does not do

  • It does not invent a salary. About half of Built In's listings have no published range, and those rows stay null.
  • There is no salary currency. Built In prints 118K-152K Annually for a Toronto job exactly as for a Boston one, so no currency field is emitted rather than assume dollars.
  • Mostly US and Canada. That is Built In's own coverage. Company boards carry the occasional Dublin or Singapore role, but Europe and Asia are not the source's strength.
  • No recruiter or applicant contact details. Built In does not publish them.
  • It does not follow the Apply link. jobUrl is the Built In page, not the employer's own system.
  • It does not log in, so saved jobs, alerts and anything behind an account are out of reach.
  • Paging has a floor. Built In stops issuing pages on a single board around page 1,000, so one very broad board runs out well before 10,000 rows on some searches. Split by city, category or keyword to go wider.
  • It is not an official Built In tool. Dami's Studio is independent and is not affiliated with or endorsed by Built In, or by any other company named on this page.

🧭 Which job scraper do you need?

If you wantUse
US and Canada tech jobs, with skills, seniority and the exact posted timeThis one
US tech jobs from Dice, with the apply linkDice Jobs Scraper
US jobs with the employer's pay kept apart from estimatesZipRecruiter Scraper
Startup jobs with salary and equityWellfound Jobs Scraper
Every open job at companies you name, read from their own hiring systemCareer Site Jobs Scraper
Public LinkedIn jobs by keyword and locationLinkedIn Jobs Scraper

❓ Questions people ask

Is there an official Built In API?

This reads public job listings, so there is no key to apply for.

Do I get the salary?

When Built In shows one. That was 723 of 1,455 jobs in a measured sample, and coverage swings hard by search: high on Chicago data roles, low on a nationwide sweep.

Can I get the full job description?

Yes. Set includeJobDescription to on, or paste the job's own URL. Both give you descriptionText and descriptionHtml at no extra charge per job.

Can I scrape one company's jobs?

Paste https://builtin.com/company/<slug>/jobs. You get the employer's full board.

Do the city sites work?

Yes, any of them. builtinnyc.com, builtinchicago.org, builtinaustin.com and the rest. Setting location on builtin.com covers the same ground.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/builtin-jobs-scraper. Either way the run happens on your Apify account at the same price.

These are public listings on public pages, read without an account. They still describe real roles at real companies, so have a reason for collecting them and check your own obligations. Apify's write-up on the legality of web scraping is a sensible starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the search or URL you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.