BuiltIn Jobs Scraper
Pricing
from $0.78 / 1,000 jobs
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
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
2
Monthly active users
6 days ago
Last modified
Categories
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.
| Input | Search terms, a location, Built In filters, or Built In URLs |
| Output | One row per job: title, company, locations, workplace type, seniority, skills, the pay range when published, the exact posted time |
| Ceiling | 10,000 jobs per run |
| Account needed | None, 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 get | Field |
|---|---|
| Built In's job id, the job page | jobId, jobUrl |
| Title, company, its Built In page and logo | title, companyName, companySlug, companyUrl, companyLogo |
| Every location the role is open in | location, locations, locationCount |
| Remote, hybrid or on site, as a label and as three flags | workplaceType, isRemote, isHybrid, isOnsite |
| The pay range as Built In prints it, and parsed | salaryText, salaryMin, salaryMax, salaryPeriod |
| Seniority, industries and the skills on the card | experienceLevel, industries, skills |
| The exact posted time and Built In's relative label | postedAt, postedLabel |
| The card's short summary, and whether the job was featured | summary, isFeatured |
| With full descriptions on: the text, employment type, benefits and closing date | descriptionHtml, descriptionText, employmentType, benefits, validThrough |
| Where the row came from | searchQuery, searchUrl, page, position, scrapedAt |
▶️ How to scrape Built In jobs
- Open Built In Jobs Scraper and click Try for free.
- Type one or more terms into Search terms, or paste Built In pages into Built In URLs.
- Set Location, Job category, Experience level and Posted within if you want them.
- Set Maximum jobs. Start around 50 to see the output shape, then click Start.
- 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}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, the box starts with data engineer | Job titles or keywords, one per line. Leave it empty if you only want the filters, or only the URLs. |
location | none | Plain text: Austin, TX, New York, Chicago. Resolved through Built In's own location lookup. Empty searches every location. |
searchRadius | Built In's own | 5mi, 10mi, 25mi, 50mi or 100mi around that location. Ignored when no location is set. |
remotePreference | any | remote, hybrid or office. Any still tells you which each job is. |
category | any | Built In's own categories: engineering, data-analytics, product, designer, sales, marketing and the rest. |
experienceLevel | any | internship, entry-level, junior, mid-level, senior, expert-leader. |
postedWithinDays | any time | 1, 3, 7 or 30. |
maxItems | 50 | Hard cap on rows across every search and URL, 1 to 10,000. |
startUrls | none | Built In pages pasted directly. See the table below. |
includeJobDescription | off | Opens each job's own page for the full text, employment type, benefits and closing date. |
proxyConfiguration | none | Optional. Only touch it if the run has to leave through your own servers. |
URLs you can paste into startUrls:
| URL | What comes back |
|---|---|
https://builtin.com/job/lead-data-engineer/10586279 | That one job, with the full description |
https://builtin.com/jobs?search=product+manager | Everything that search returns |
https://builtin.com/jobs/remote/engineering | Every remote engineering role |
https://builtin.com/company/crowdstrike/jobs | One company's whole board |
https://builtinnyc.com/jobs | A 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"}
| Field | How to read it |
|---|---|
jobId | Stable. Use it as your dedupe key across runs. |
salaryText | Built 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, locationCount | Every location the role is open in. location holds the first. |
workplaceType | Built 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. |
postedAt | The exact publish timestamp. Falls back to the relative label on the rare page that omits it. |
skills, summary | Come 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, benefits | null or empty unless you switch on includeJobDescription or paste a job URL. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A job | It has a jobId and neither flag below | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
A real job row carries no charged field at all, so filter on _sample and _diagnostic being
absent.
| Code | What it means |
|---|---|
BAD_URL | That URL is not a Built In job, board or company page. |
COMPANY_NOT_FOUND | The company slug in the URL did not resolve. Check it on builtin.com. |
LOCATION_NOT_FOUND | Built In's lookup has no match for that place name. |
LOCATION_LOOKUP_FAILED | The lookup itself did not answer. Re-run it. |
JOB_NOT_FOUND | Built In removes a job page once the listing closes. |
NO_RESULTS | The search ran and matched nothing. Try a broader term or widen the date window. |
HTTP_ERROR | Built In was unreachable or answered badly on that request. |
TIME_LIMIT | The 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
postedWithinDaysset to1, 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
skillsacross 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 Annuallyfor 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.
jobUrlis 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 want | Use |
|---|---|
| US and Canada tech jobs, with skills, seniority and the exact posted time | This one |
| US tech jobs from Dice, with the apply link | Dice Jobs Scraper |
| US jobs with the employer's pay kept apart from estimates | ZipRecruiter Scraper |
| Startup jobs with salary and equity | Wellfound Jobs Scraper |
| Every open job at companies you name, read from their own hiring system | Career Site Jobs Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn 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.
Is scraping Built In legal?
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.