BuiltIn Jobs Scraper - Tech Roles with Required Skills avatar

BuiltIn Jobs Scraper - Tech Roles with Required Skills

Pricing

from $1.20 / 1,000 job scrapeds

Go to Apify Store
BuiltIn Jobs Scraper - Tech Roles with Required Skills

BuiltIn Jobs Scraper - Tech Roles with Required Skills

Scrape tech and startup jobs from Built In with the required-skills list for every role, plus company, industry tags, workplace type, experience level and the full description. Filter by country, category and remote. No login, no API key.

Pricing

from $1.20 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

WebData Labs

WebData Labs

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

BuiltIn Jobs Scraper - tech roles with the skills each one requires

Scrape tech and startup jobs from Built In and get back a clean row per role with the list of skills the job actually asks for, the company, its industries, the workplace type, the experience level and Built In's own summary of the role.

No login. No API key. No browser. Pure HTTP, runs on 256 MB.

$1.50 per 1,000 jobs. No Actor start fee.

✅ What you get / ❌ what this isn't

Top skills as a structured array on every row: ["Python", "Spark", "AWS", "Terraform"] ✅ Company, its Built In profile URL and its industry tags ✅ Workplace type (Remote, Hybrid, In-Office and the mixed variants) and experience level ✅ Built In's own written summary of the role on every row, at no extra cost ✅ Optional full job description from the job page ✅ Filters for country, category and remote, plus a posted-within window ✅ Monitoring mode that returns only jobs you have not already been given

❌ No salary. Built In does not publish pay on its job cards or job pages, so there is no salary field ❌ Not a candidate or profile scraper. Public job listings only ❌ Not an apply bot

🔎 Why use this Actor

Most job scrapers give you a title, a company and a link. The field that makes a tech job feed worth having is what the role actually requires, and Built In publishes exactly that on every card.

This Actor returns it as an array you can group and count, which turns a job feed into a skills-demand dataset: which frameworks are hiring, which are cooling, which companies are staffing up on which stack, and how that differs by city and seniority. Measured on a sample of 60 US software roles: 60 of 60 carried a skills list, averaging 8 to 12 skills each.

You also get Built In's summary of every role for free, so most use cases never need the slower full-description pass at all.

🗂️ Coverage

Built In lists tech and startup jobs. Countries you can pick:

  • United States
  • United Kingdom
  • Canada
  • Ireland
  • Germany
  • India
  • Australia
  • Portugal
  • Spain
  • Poland
  • Mexico
  • Brazil

Categories you can filter by:

  • Software engineering
  • Data and analytics
  • Design and UX
  • Product
  • Operations
  • Sales
  • Marketing
  • Finance
  • HR
  • Legal
  • Customer success
  • Content
  • Cybersecurity
  • Consulting
  • Engineering
  • Entry level

👥 Who it's for

  • Recruiters and sourcers who need to know which stack a role wants before writing outreach.
  • Talent-market analysts building skills-demand series: count skills by month, city or seniority.
  • Developer-tool and DevRel teams measuring which companies are adopting their technology, from the job ads.
  • Job boards and aggregators that want a clean tech feed with company and industry attached.
  • Sales teams using hiring as a buying signal, with industries and companyUrl for enrichment.

📚 Example tasks

What you wantInput
Python roles in the US{"searchQueries": ["python"], "country": "USA"}
All data and analytics jobs{"category": "data-analytics", "country": "USA"}
Remote software engineering roles{"category": "dev-engineering", "country": "USA", "remoteOnly": true}
Machine learning jobs with full descriptions{"searchQueries": ["machine learning"], "country": "USA", "includeDescription": true}
Entry level tech jobs{"category": "entry-level", "country": "USA"}
Cybersecurity roles posted this week{"category": "cybersecurity", "country": "USA", "postedWithinDays": "7"}
Several stacks in one run{"searchQueries": ["rust", "golang", "kubernetes"], "country": "USA", "maxResults": 600}
Product and design in Canada{"category": "product", "country": "CAN"}
Paste a Built In search URL{"startUrls": ["https://builtin.com/jobs/remote/dev-engineering?search=react"]}
Only what is new since the last run{"searchQueries": ["python", "data engineer"], "country": "USA", "onlyNewJobs": true}
Tech jobs in the UK{"country": "GBR"}

⚙️ How it works

Give it keywords, a category, or a Built In search URL pasted from your browser. Every request carries an explicit country, because Built In personalises its results by visitor location and a run that leaves it to chance is not reproducible.

Each search is paged until Built In stops returning jobs it has not already given us. Every row is pushed to the dataset the moment it is parsed, so a run you stop early keeps everything it found.

🔁 Monitoring: only jobs you have not seen before

Set onlyNewJobs to true and schedule it. The Actor remembers the job ids it has delivered and returns only listings that are new since the last run, so a daily monitor never re-delivers, and never re-bills, the same posting.

Run it as a saved task and keep using that task: the memory belongs to the task, not to one-off runs from the Actor page.

📥 Input

FieldTypeDefaultWhat it does
startUrlsarrayemptyBuilt In search URLs pasted from your browser. Keywords, country, category and remote are read from each one.
searchQueriesarray["python"]One keyword search per line. Each is crawled separately. Leave empty to browse a whole category or country.
countrystringUSAWhich country's jobs to return.
categorystringallOne Built In category, or all of them.
remoteOnlybooleanfalseAsk Built In for its remote board. See the caveat below: it is a preference, not a hard filter.
postedWithinDaysstringany1, 3, 7 or 30.
maxResultsinteger200Total jobs across all searches.
includeDescriptionbooleanfalseAlso fetch the full description from each job page. Free, but slower: it adds one request per job.
onlyNewJobsbooleanfalseReturn only jobs not delivered by a previous run of the same task.

Accepted input aliases

Input pasted from another Actor's docs runs here without editing: urls and url for startUrls, queries and keywords for searchQueries, maxItems and maxJobs for maxResults.

There is nothing to configure about proxies, concurrency, retries or request pacing. Those are handled internally and included in the price.

📤 Output

One row per job.

{
"jobId": "11032078",
"title": "Software Engineer II - Platform Engineer Databricks",
"company": "JPMorganChase",
"companyUrl": "https://builtin.com/company/jpmorgan-chase",
"jobUrl": "https://builtin.com/job/software-engineer-ii-platform-engineer-databricks/11032078",
"location": "Jersey City, NJ, USA",
"workplaceType": "Hybrid",
"experienceLevel": "Junior",
"postedLabel": "An Hour Ago",
"industries": ["Financial Services"],
"skills": ["Spark", "AWS", "Databricks", "Git", "Java", "Jenkins", "Python", "Terraform"],
"summary": "Builds and supports a managed AWS Databricks data platform, including platform design, configuration, workspace administration, monitoring and operational stability...",
"descriptionText": null,
"searchQuery": "python",
"scrapedAt": "2026-09-05T16:20:11Z"
}

Output fields

FieldTypeDescription
jobIdstringBuilt In's own job id. Stable, and what monitoring mode remembers.
titlestringJob title as posted.
companystringHiring company.
companyUrlstringThe company's Built In profile.
jobUrlstringThe listing on Built In.
locationstringCity, state and country. Null on fully remote roles, about 6 in 60.
workplaceTypestringRemote, Hybrid, In-Office, Remote or Hybrid or In-Office or Remote.
experienceLevelstringEntry level, Junior, Mid level, Senior level or Expert/Leader.
postedLabelstringBuilt In's relative posting age, for example An Hour Ago or 3 Days Ago.
industriesarrayThe company's industry tags.
skillsarrayThe skills the role asks for. The reason this Actor exists.
summarystringBuilt In's own written summary of the role. Always present, no extra cost.
descriptionTextstringFull job description. Only when includeDescription is on.
searchQuerystringWhich of your keywords produced this row.
scrapedAtstringUTC timestamp of the row.

💵 How much does it cost to scrape Built In?

JobsCost
100$0.15
1,000$1.50
10,000$15.00

$0.0015 per job and nothing else. No Actor start fee, so a run that returns nothing costs nothing. Skills, industries and the role summary are included at the base rate, and so are full descriptions when you turn them on.

⚠️ Limits and caveats

Measured 5 September 2026, so you do not spend a run finding them out.

  • There is no salary data. Built In does not publish pay on its job cards or on its job pages, and the pages carry no structured job-posting markup either. If you need salary, this is the wrong source; if you need skills, there is no better one.
  • Results depend on the country you choose. Built In personalises by visitor location: the same keyword from a European connection and from a US one shared none of their first 25 results. The Actor always sends your chosen country explicitly so a scheduled run stays reproducible. The default is the United States.
  • Remote, Hybrid and In-Office are a preference, not a hard filter. Built In's own /jobs/office board returns mostly Hybrid roles. Trust the workplaceType field on each row, not the filter.
  • Posted dates are relative (Yesterday, 3 Days Ago) because that is exactly what Built In renders. There is no absolute timestamp to convert.
  • A broad search is deep. A US python search served more than 5,000 jobs without running out, so maxResults is usually what ends a run rather than Built In running out of results.
  • Page size varies between 10 and 25 depending on the category, so progress is not a neat multiple of 25.
  • Full descriptions are much slower. They add a page fetch per job, and Built In starts refusing connections if it is asked too quickly, so the Actor paces itself. A 200-job run takes about 5 seconds without descriptions and several minutes with them. They are off by default for that reason, and the per-row summary covers most needs.

🔁 Run it on the Apify platform

Schedule it, use monitoring mode, and pull results with the Apify API or the JavaScript and Python clients. The dataset exports as JSON, CSV, Excel and XML.

🤖 Use with AI agents via MCP

Claude Code

$claude mcp add apify --transport http https://mcp.apify.com --header "Authorization: Bearer <YOUR_APIFY_TOKEN>"

Cursor or Claude Desktop

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Then ask in words: "find remote data engineering jobs on Built In that ask for dbt". The agent fills searchQueries, country and remoteOnly itself, which is why this Actor keeps structured inputs alongside URL input.

🔗 Use this Actor in n8n

Add the Apify node, choose Run Actor, pick webdata_labs/builtin-jobs-scraper and paste your input JSON. Chain Get Dataset Items after it. A common pattern is a daily schedule with onlyNewJobs: true feeding new roles into a spreadsheet or CRM.

This Actor reads only public job listings that Built In serves to logged-out visitors. It does not log in, does not touch member profiles and does not collect personal data. Job listings are business information rather than personal data.

You remain responsible for what you do with the output. If you plan to republish listings, check Built In's terms and your own position first.

❓ FAQ

Does it need a Built In login?

No. It reads only what Built In serves to logged-out visitors. There is no credential field.

Where do the skills come from?

Built In publishes a "Top Skills" list on each job card. The Actor returns it verbatim as an array, so you can count and group it without parsing free text.

Why is there no salary field?

Built In does not publish pay, anywhere. Rather than ship a column that is always null, there is no salary field at all. For salary data on European roles, see the XING Jobs Scraper linked above.

Why did I get jobs in the wrong country?

You should not: the Actor always sends the country you picked. If you pasted a startUrls entry that carries its own country parameter, that URL's country wins for that search.

How many jobs can I get?

More than 5,000 on a broad US keyword. maxResults is what ends most runs.

Are full descriptions worth turning on?

Often not. Every row already carries Built In's summary of the role. Turn descriptions on when you need the literal posting text, and expect the run to take several minutes instead of several seconds.

Does the remote filter really return only remote jobs?

No, and neither does Built In's own remote board. Filter your dataset on workplaceType afterwards if you need certainty.

How does monitoring mode remember what it has seen?

It stores the ids it actually delivered in a store that belongs to the task, so a scheduled task keeps its history across runs. Jobs it found but did not deliver, because your maxResults was reached, are deliberately not remembered.

Am I charged for a run that finds nothing?

No. The only charge is per job returned, and there is no start fee.

📝 Changelog

0.1 - 5 September 2026. First release. Keyword, category, country and remote search, posted-within window, skills and industry arrays, Built In role summaries, optional full descriptions, and monitoring mode.

🛠️ Support

Found a bug or need a field? Open an issue on the Actor's Issues tab. Reports with a run id get fixed fastest.

⭐ Rate this Actor

If it saved you time, a rating helps other people find it.