Built In Jobs Scraper — Hiring Intelligence Feed
Pricing
from $3.00 / 1,000 job scrapeds
Built In Jobs Scraper — Hiring Intelligence Feed
Extract Built In tech jobs with normalized company, location, workplace, salary, skills, posting date and direct apply URL. Use for hiring intelligence, salary research and job alerts.
Pricing
from $3.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
17 days ago
Last modified
Categories
Share
What is Built In Jobs Scraper — Hiring Intelligence Feed?
Built In Jobs Scraper extracts technology and startup job listings from Built In search pages and company job boards into a structured dataset. Each row is one job with its title, Built In job URL and ID, and, with job details on, the hiring company, location, workplace type, employment type, experience level, salary range, skills, description, posting dates and direct apply link. Recruiters, compensation analysts, founders tracking competitor hiring and AI agents use it to turn Built In listings into a feed they can filter, compare and schedule.
Why teams use it
- Two depths in one Actor. A fast card-level feed with
includeJobDetails: false, or full job pages with salary, skills, dates andapplyUrlwhen it istrue. - Normalized salary.
salaryMin,salaryMax,salaryCurrencyandsalaryPeriodare numeric and unit-labelled when Built In publishes pay. - Agent-friendly descriptions.
responseFormat: "concise"keeps descriptions short;detailedreturns the longer text. - Exact saved searches. Paste any Built In jobs, category or company-jobs URL into
startUrls. - Stable shape. Every row has the same keys, with
skillsalways an array, which keeps CSV exports and databases tidy.
Best fit for this Actor
- Designed for public Built In job listings, from a role keyword search to a specific company's jobs page.
- Best fit for hiring intelligence, salary-band research, job-alert pipelines and recruiter sourcing of companies that are hiring.
- To compare the same role on a second tech job board, use Dice.com Jobs Scraper with the same keyword and merge the two datasets.
- When you want a company's full open roles straight from its career site, continue with Career Site Job Listing Scraper for the companies you find here.
Example workflow: competitor hiring watch
A startup founder wants to know how fast three competitors are hiring machine-learning talent. He starts with searchQuery set to machine learning engineer, workplaceType set to remote, maxResults at 50 and includeJobDetails on. The dataset returns each role's company, salary range, skills and posting date. He filters to the three competitor names, compares their salary bands with his own offer, then schedules the run weekly and exports new rows into a hiring dashboard so changes in competitor demand show up early.
Input
{"searchQuery": "machine learning engineer","location": "Austin, TX","workplaceType": "hybrid","maxResults": 20,"includeJobDetails": true,"responseFormat": "concise"}
To scrape an existing Built In results page exactly:
{"startUrls": [{ "url": "https://builtin.com/jobs?search=ai" }],"maxResults": 10,"includeJobDetails": true}
| Field | Type | What it controls |
|---|---|---|
searchQuery | string | Role or skill phrase such as product manager. Default software engineer. |
location | string | Optional city and state such as Austin, TX. Empty means all locations. |
workplaceType | string | any (default), remote, hybrid or office. |
startUrls | array | Built In jobs, category or company-jobs page URLs to scrape exactly. |
maxResults | integer | Jobs returned and billed across the run, 1 to 100. Default 20. |
includeJobDetails | boolean | Visit each job page for company, salary, skills, dates, description and apply URL. Default true. |
responseFormat | string | concise (default) for a short description or detailed for the longer text. |
Output
One dataset row per job.
| Field | What it contains |
|---|---|
jobId, title, jobUrl | Built In job ID, role title and listing URL |
companyName | Hiring company, from the job page |
location, workplaceType, employmentType | Location, remote/hybrid/office arrangement and type such as FULL_TIME |
experienceLevel | Seniority shown or inferred from the title |
salaryMin, salaryMax, salaryCurrency, salaryPeriod | Published pay range, currency and unit |
skills | Deduplicated skills and technologies |
description | Plain-text description, length set by responseFormat |
postedAt, validThrough | Posting and expiry dates when published |
applyUrl | Direct employer application link when available |
scrapedAt, source | Collection time and source site |
Fields from the job page fill in when includeJobDetails is on and Built In publishes them; otherwise they are null. A quick card-level row looks like this:
{"jobId": "11452578","title": "AI Associate Engineer for Sales Assistant Platform Technology - Software Engineer III","companyName": null,"location": null,"workplaceType": null,"employmentType": null,"experienceLevel": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"skills": [],"description": null,"postedAt": null,"validThrough": null,"jobUrl": "https://builtin.com/job/ai-associate-engineer-sales-assistant-platform-technology-software-engineer-iii/11452578","applyUrl": null,"scrapedAt": "2026-10-01T01:29:36.031Z","source": "builtin.com"}
Every run also writes OUTPUT and RUN_SUMMARY to the default key-value store, including the run outcome (for example COMPLETE or VALID_EMPTY for a valid search with no matches).
Pricing
This Actor uses Pay per event plus Apify platform usage. The events are:
- Actor Start, once per run.
- Job scraped, once for each complete, validated job row saved to the dataset.
Worked example: a search with maxResults set to 20 that saves 20 jobs costs one Actor Start event plus 20 Job scraped events, plus the compute and proxy usage of the run. Job detail pages take more browser time, so a card-level run with includeJobDetails: false uses less platform usage. Check the live Pricing tab on this page for current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~built-in-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery": "data engineer", "workplaceType": "remote", "maxResults": 10, "includeJobDetails": true}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/built-in-jobs-scraper").call(run_input={"searchQuery": "data engineer", "workplaceType": "remote", "maxResults": 10})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job.get("companyName"), job.get("salaryMin"), job["jobUrl"])
Use it with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or another MCP client through Apify MCP, then ask:
Find 15 remote data engineer jobs on Built In with full job details. Return company, salary range, top skills and apply link, and tell me the median published salary.
The agent receives job rows with salary, skills and links, reads them with get-dataset-items, and can cite jobUrl and scrapedAt as provenance. responseFormat: "concise" keeps descriptions compact for the agent's context. Cost scales with saved jobs, so maxResults keeps agent runs scoped.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| You need salary and skills | Keep includeJobDetails: true | Rows with pay range, skills, dates and apply link |
| You need a fast list of open roles | Set includeJobDetails: false | Quick title and job URL feed for a first pass |
| A saved Built In search or company page | Paste its URL in startUrls | Exactly the listings you see on Built In |
| Remote-only research | Set workplaceType to remote | Remote roles only |
| Ongoing monitoring | Schedule a focused query with the same maxResults | Comparable runs week to week |
Builder's note
I built this for people who ask hiring questions, such as who is paying what for which skills, rather than people browsing listings one by one. I designed two depths so a quick card scan stays light while full job pages bring the salary, skills and apply links that answer those questions. Every row keeps the same keys whether or not a detail was published, because I found downstream spreadsheets and agents handle a stable null far better than a shifting schema.
FAQ
Does it apply to jobs or log in?
No. It reads public Built In listings and returns links; applying stays with you.
Why are some salary fields empty?
Salary fields fill when the employer publishes a range on Built In and includeJobDetails is on. Many listings leave pay unpublished.
Can I scrape one company's jobs?
Yes. Paste the company's Built In jobs page URL into startUrls.
Responsible use
This Actor extracts public job-listing information from Built In. Use the data in line with Built In's terms, applicable laws and your own privacy and retention policies. Built In is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Built In. For questions, open a ticket in the Issues tab.