Nimbryxo Studio

Use BuiltIn Tech Company Directory & Hiring Signal Scraper with Python

Browse BuiltIn.com's US tech-company directory across multiple cities by industry, technology, size and work arrangement; search companies by name or fetch profiles. Get headcount, tech stack, offices, benefits and hiring signals.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "companySize": "",
  "companyUrls": [],
  "hiringOnly": false,
  "includeBenefits": false,
  "includeDetails": false,
  "includeJobCards": false,
  "includeProfile": false,
  "industry": "",
  "location": "",
  "locations": [],
  "maxItems": 1,
  "mode": "browse",
  "officeType": "",
  "remoteJobsOnly": false,
  "searchQueries": [],
  "startUrls": [],
  "technology": ""
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to fetch. `browse` walks the BuiltIn company directory with the filters below. `search` looks companies up by name. `byCompany` fetches specific companies by name, slug or BuiltIn URL.
searchQueriesarrayoptionalCompany names or partial names to search for, e.g. `stripe`, `openai`, `data dog`. Browse-only filters are ignored in search mode with a warning. Each query returns up to 50 matching companies before `maxItems` is applied.
companyUrlsarrayoptionalBuiltIn company URLs (e.g. `https://builtin.com/company/stripe`), slugs (`stripe`) or exact company names (`Stripe`). Names are resolved through BuiltIn's company search; only an exact slug or exact name match is accepted. Unresolved inputs are emitted as error rows with `input` and `error` fields.
startUrlsarrayoptionalOptional BuiltIn URLs to process instead of the mode routes. Accepts requestListSources shapes: plain strings or objects with a `url` field, e.g. `{ "url": "https://builtin.com/companies?city=Chicago" }`. Directory URLs (`/companies...`) are paginated and results are deduplicated; company profile URLs (`/company/...`) are enriched directly. Other hosts and paths are emitted as error rows. `?page=` in a start URL is used as the first page.
locationsarrayoptionalBrowse one or more US city/metro markets. BuiltIn does not OR repeated city parameters, so the actor requests each market separately and unions/deduplicates the results; records include `searchLocation` and `matchedLocations`. Accepts the same aliases as `location` (e.g. `chicago`, `austin`, `new-york-city`) and their display titles. Overrides `location` when it contains a valid market. Browse mode only.
locationstringoptionalUS city or metro market to browse. Used only when `locations` is empty; browse mode only, while search/byCompany ignore it with a warning. `All US` searches every US market. Legacy values `national` and an empty value also mean all US.
industrystringoptionalFilter companies by BuiltIn industry. Browse mode only; search/byCompany ignore it with a warning.
technologystringoptionalFilter companies by a technology they publish on BuiltIn. Browse mode only; search/byCompany ignore it with a warning.
companySizestringoptionalFilter companies by employee-count band. Browse mode only; search/byCompany ignore it with a warning.
officeTypestringoptionalFilter by work arrangement. Browse mode only; search/byCompany ignore it with a warning. `remote` means fully remote companies; `hybrid` and `on-site` match the company's published office model. Values such as `On-Site`, `On Site` and `onsite` are normalized to `OnSite`. Companies with no published work model are excluded when this filter is set.
hiringOnlybooleanoptionalOnly return companies with at least one open job on BuiltIn. Companies without a published hiring signal are excluded when this filter is set. Browse mode only; search/byCompany ignore it with a warning.
remoteJobsOnlybooleanoptionalOnly return companies that currently list remote jobs on BuiltIn. Browse mode only; search/byCompany ignore it with a warning.
minEmployeesintegeroptionalDrop companies whose published employee count is below this value. Companies without a published count are kept. If `minEmployees` is greater than `maxEmployees`, the actor stops with a clear status message instead of returning bad data.
maxEmployeesintegeroptionalDrop companies whose published employee count is above this value. Companies without a published count are kept. If `minEmployees` is greater than `maxEmployees`, the actor stops with a clear status message instead of returning bad data.
includeDetailsbooleanoptionalFetch each company's full BuiltIn record for its tech stack, offices, headquarters, founding year, website and benefits count. If a detail record is missing or has no tech stack, the actor falls back to the company profile page. Turn off for the fastest listing-only run.
includeProfilebooleanoptionalAlso read each company profile for recent jobs, typical on-site time and product/tech headcount. Adds one request per company.
includeJobCardsbooleanoptionalRead each company's public `/company/{slug}/jobs` page and attach up to 20 recent job cards (`jobCards`) with job ID, title, approximate posted age, location and workplace type. This is a recent-page sample, not the company's complete job board. Adds one request per company.
postedWithinDaysintegeroptionalKeep only recent job cards whose published relative age is within this many days. Ages are approximate (`postedAgeDaysApprox`); cards with no age or an open-ended age such as `30+ Days Ago` are excluded because freshness cannot be confirmed. Setting this enables `includeJobCards` automatically.
includeBenefitsbooleanoptionalAlso read each company's benefits page and return the full list of published perks. Adds one request per company.
maxItemsintegeroptionalHard cap on company records returned; the maximum remains 10,000 per run. Large runs with includeDetails on are slow because each company needs a detail request; use includeDetails false for bulk listing. For a directory larger than 10,000, run filtered shards (for example one market or industry per run) and merge datasets by companyId/slug. The actor warns if its page safety cap is reached before maxItems.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/HFvvKHaMabeeMs0Fa/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

BuiltIn company records with headcount, industries, tech stack, offices, benefits and hiring signals, including matched search locations and honesty flags for partial category counts, truncated listing descriptions, sampled recent jobs and approximate recent-job-card ages. Unresolved byCompany inputs and invalid start URLs are emitted as error rows.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build VUzbe7joOuxTlVkch and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.