BuiltIn Tech Company Directory & Hiring Signal Scraper
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.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What 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. |
searchQueries | array | optional | Company 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. |
companyUrls | array | optional | BuiltIn 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. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What 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. |
searchQueries | array | optional | Company 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. |
companyUrls | array | optional | BuiltIn 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. |
startUrls | array | optional | Optional 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. |
locations | array | optional | Browse 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. |
location | string | optional | US 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. |
industry | string | optional | Filter companies by BuiltIn industry. Browse mode only; search/byCompany ignore it with a warning. |
technology | string | optional | Filter companies by a technology they publish on BuiltIn. Browse mode only; search/byCompany ignore it with a warning. |
companySize | string | optional | Filter companies by employee-count band. Browse mode only; search/byCompany ignore it with a warning. |
officeType | string | optional | Filter 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. |
hiringOnly | boolean | optional | Only 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. |
remoteJobsOnly | boolean | optional | Only return companies that currently list remote jobs on BuiltIn. Browse mode only; search/byCompany ignore it with a warning. |
minEmployees | integer | optional | Drop 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. |
maxEmployees | integer | optional | Drop 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. |
includeDetails | boolean | optional | Fetch 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. |
includeProfile | boolean | optional | Also read each company profile for recent jobs, typical on-site time and product/tech headcount. Adds one request per company. |
includeJobCards | boolean | optional | Read 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. |
postedWithinDays | integer | optional | Keep 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. |
includeBenefits | boolean | optional | Also read each company's benefits page and return the full list of published perks. Adds one request per company. |
maxItems | integer | optional | Hard 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. |
Download the published input schema
View complete JSON
{
"description": "Browse BuiltIn's tech-company directory by location, industry, technology, company size and work arrangement, search companies by name, or look up specific companies. Returns headcount, industries, tech stack, offices, benefits, hiring status, open-jobs signals and optional recent job cards with approximate posting ages.",
"properties": {
"companySize": {
"default": "",
"description": "Filter companies by employee-count band. Browse mode only; search/byCompany ignore it with a warning.",
"editor": "select",
"enum": [
"",
"1-10",
"11-50",
"51-200",
"201-500",
"501-1000",
"1000"
],
"enumTitles": [
"All sizes",
"1-10 employees",
"11-50 employees",
"51-200 employees",
"201-500 employees",
"501-1000 employees",
"1000+ employees"
],
"prefill": "",
"title": "Company size",
"type": "string"
},
"companyUrls": {
"default": [],
"description": "BuiltIn 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.",
"editor": "stringList",
"prefill": [],
"title": "Company names, slugs or URLs (mode=byCompany)",
"type": "array"
},
"hiringOnly": {
"default": false,
"description": "Only 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.",
"prefill": false,
"title": "Hiring companies only",
"type": "boolean"
},
"includeBenefits": {
"default": false,
"description": "Also read each company's benefits page and return the full list of published perks. Adds one request per company.",
"prefill": false,
"title": "Include detailed benefits",
"type": "boolean"
},
"includeDetails": {
"default": true,
"description": "Fetch 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.",
"prefill": false,
"title": "Include company details",
"type": "boolean"
},
"includeJobCards": {
"default": false,
"description": "Read 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.",
"prefill": false,
"title": "Include recent job cards",
"type": "boolean"
},
"includeProfile": {
"default": false,
"description": "Also read each company profile for recent jobs, typical on-site time and product/tech headcount. Adds one request per company.",
"prefill": false,
"title": "Include profile extras",
"type": "boolean"
},
"industry": {
"default": "",
"description": "Filter companies by BuiltIn industry. Browse mode only; search/byCompany ignore it with a warning.",
"editor": "select",
"enum": [
"",
"3d-printing",
"3pl-third-party-logistics",
"adtech",
"aerospace",
"agency",
"agriculture",
"analytics-industry",
"angel-vcfirm",
"app-development",
"appliances",
"artificial-intelligence",
"asset-management-discovery",
"automation",
"automotive",
"beauty",
"big-data",
"big-data-analytics",
"biotech",
"blockchain",
"business-intelligence-industry",
"cannabis",
"chemical",
"cloud",
"co-working-space-incubator",
"computer-vision",
"consulting",
"consumer-web",
"conversational-ai",
"coupons",
"cryptocurrency",
"cybersecurity",
"data-privacy",
"database",
"defense",
"design",
"digital-media",
"ecommerce",
"edtech",
"energy",
"enterprise-web",
"esports",
"events",
"fashion",
"financial-services",
"fintech",
"fitness",
"food",
"gaming",
"generative-ai",
"greentech",
"hardware-industry",
"healthtech",
"hospitality",
"hr-tech",
"industrial",
"information-technology",
"infrastructure-as-a-service-iaas",
"insurance",
"iot",
"kids-family",
"legal-tech",
"logistics",
"machine-learning-industry",
"manufacturing",
"marketing-tech",
"metaverse",
"mobile",
"music",
"nanotechnology",
"natural-language-processing",
"news-entertainment",
"nft",
"on-demand",
"other-industry",
"payments",
"pet",
"pharmaceutical",
"productivity",
"professional-services",
"proptech",
"quantitative-trading",
"quantum-computing",
"real-estate",
"renewable-energy",
"retail",
"robotics",
"sales-industry",
"security-industry",
"semiconductor",
"seo",
"sharing-economy",
"social-impact",
"social-media",
"software",
"solar",
"sports",
"telehealth",
"transportation",
"travel",
"utilities",
"virtual-reality",
"wearables",
"web3"
],
"enumTitles": [
"All industries",
"3D Printing",
"3PL: Third Party Logistics",
"AdTech",
"Aerospace",
"Agency",
"Agriculture",
"Analytics",
"Angel or VC Firm",
"App development",
"Appliances",
"Artificial Intelligence",
"Asset Management + Discovery",
"Automation",
"Automotive",
"Beauty",
"Big Data",
"Big Data Analytics",
"Biotech",
"Blockchain",
"Business Intelligence",
"Cannabis",
"Chemical",
"Cloud",
"Co-Working Space or Incubator",
"Computer Vision",
"Consulting",
"Consumer Web",
"Conversational AI",
"Coupons",
"Cryptocurrency",
"Cybersecurity",
"Data Privacy",
"Database",
"Defense",
"Design",
"Digital Media",
"eCommerce",
"Edtech",
"Energy",
"Enterprise Web",
"Esports",
"Events",
"Fashion",
"Financial Services",
"Fintech",
"Fitness",
"Food",
"Gaming",
"Generative AI",
"Greentech",
"Hardware",
"Healthtech",
"Hospitality",
"HR Tech",
"Industrial",
"Information Technology",
"Infrastructure as a Service (IaaS)",
"Insurance",
"Internet of Things",
"Kids + Family",
"Legal Tech",
"Logistics",
"Machine Learning",
"Manufacturing",
"Marketing Tech",
"Metaverse",
"Mobile",
"Music",
"Nanotechnology",
"Natural Language Processing",
"News + Entertainment",
"NFT",
"On-Demand",
"Other",
"Payments",
"Pet",
"Pharmaceutical",
"Productivity",
"Professional Services",
"PropTech",
"Quantitative Trading",
"Quantum Computing",
"Real Estate",
"Renewable Energy",
"Retail",
"Robotics",
"Sales",
"Security",
"Semiconductor",
"SEO",
"Sharing Economy",
"Social Impact",
"Social Media",
"Software",
"Solar",
"Sports",
"Telehealth",
"Transportation",
"Travel",
"Utilities",
"Virtual Reality",
"Wearables",
"Web3"
],
"prefill": "",
"title": "Industry",
"type": "string"
},
"location": {
"default": "",
"description": "US 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.",
"editor": "select",
"enum": [
"",
"all",
"national",
"albuquerque",
"ann-arbor",
"atlanta",
"austin",
"baltimore",
"baton-rouge",
"birmingham",
"boise",
"boston",
"buffalo",
"charleston",
"charlotte",
"chicago",
"cincinnati",
"cleveland",
"colorado",
"columbus",
"dallas-fort-worth",
"dayton",
"des-moines",
"detroit",
"fayetteville-springdale-rogers",
"greensboro",
"hampton-roads",
"hartford",
"houston",
"huntsville",
"indianapolis",
"jacksonville",
"kansas-city",
"las-vegas",
"lexington-ky",
"lincoln",
"little-rock",
"los-angeles",
"louisville",
"madison",
"memphis",
"miami",
"milwaukee",
"minneapolis-saint-paul",
"nashville",
"new-orleans",
"new-york-city",
"ogden",
"oklahoma-city",
"omaha",
"orlando",
"palm-bay-melbourne-titusville",
"pensacola",
"peoria",
"philadelphia",
"phoenix-mesa-scottsdale",
"pittsburgh",
"portland",
"portland-me",
"providence",
"provo",
"raleigh-durham",
"reno",
"richmond",
"rochester",
"sacramento",
"salt-lake-city",
"san-antonio",
"san-diego",
"san-francisco",
"san-luis-obispo",
"santa-cruz",
"seattle",
"spokane",
"st-louis",
"tallahassee",
"tampa-bay",
"tucson",
"tulsa",
"washington-dc",
"wichita",
"wilmington"
],
"enumTitles": [
"All US (default)",
"All US",
"All US (legacy national)",
"Albuquerque, New Mexico",
"Ann Arbor, Michigan",
"Atlanta, Georgia",
"Austin, Texas",
"Baltimore, Maryland",
"Baton Rouge, Louisiana",
"Birmingham, Alabama",
"Boise, Idaho",
"Boston, Massachusetts",
"Buffalo, New York",
"Charleston, South Carolina",
"Charlotte, North Carolina",
"Chicago, Illinois",
"Cincinnati, Ohio",
"Cleveland, Ohio",
"Colorado",
"Columbus, Ohio",
"Dallas-Fort Worth, Texas",
"Dayton, Ohio",
"Des Moines, Iowa",
"Detroit, Michigan",
"Fayetteville-Springdale-Rogers, Arkansas",
"Greensboro, North Carolina",
"Hampton Roads, Virginia",
"Hartford, Connecticut",
"Houston, Texas",
"Huntsville, Alabama",
"Indianapolis, Indiana",
"Jacksonville, Florida",
"Kansas City, Missouri",
"Las Vegas, Nevada",
"Lexington, Kentucky",
"Lincoln, Nebraska",
"Little Rock, Arkansas",
"Los Angeles, California",
"Louisville, Kentucky",
"Madison, Wisconsin",
"Memphis, Tennessee",
"Miami, Florida",
"Milwaukee, Wisconsin",
"Minneapolis–Saint Paul, Minnesota",
"Nashville, Tennessee",
"New Orleans, Louisiana",
"New York City, New York",
"Ogden, Utah",
"Oklahoma City, Oklahoma",
"Omaha, Nebraska",
"Orlando, Florida",
"Palm Bay-Melbourne-Titusville, Florida",
"Pensacola, Florida",
"Peoria, Illinois",
"Philadelphia, Pennsylvania",
"Phoenix – Mesa – Scottsdale, Arizona",
"Pittsburgh, Pennsylvania",
"Portland, Oregon",
"Portland, Maine",
"Providence, Rhode Island",
"Provo, Utah",
"Raleigh-Durham, North Carolina",
"Reno, Nevada",
"Richmond, Virginia",
"Rochester, New York",
"Sacramento, California",
"Salt Lake City, Utah",
"San Antonio, Texas",
"San Diego, California",
"San Francisco, California",
"San Luis Obispo, California",
"Santa Cruz, California",
"Seattle, Washington",
"Spokane, Washington",
"St. Louis, Missouri",
"Tallahassee, Florida",
"Tampa Bay, Florida",
"Tucson, Arizona",
"Tulsa, Oklahoma",
"Washington DC, District of Columbia",
"Wichita, Kansas",
"Wilmington, North Carolina"
],
"prefill": "",
"title": "Location",
"type": "string"
},
"locations": {
"default": [],
"description": "Browse 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.",
"editor": "stringList",
"prefill": [],
"title": "Locations (browse mode, multiple markets)",
"type": "array"
},
"maxEmployees": {
"description": "Drop 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.",
"maximum": 1000000,
"minimum": 0,
"title": "Maximum employees",
"type": "integer"
},
"maxItems": {
"default": 100,
"description": "Hard 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.",
"maximum": 10000,
"minimum": 1,
"prefill": 1,
"title": "Max companies",
"type": "integer"
},
"minEmployees": {
"description": "Drop 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.",
"maximum": 1000000,
"minimum": 0,
"title": "Minimum employees",
"type": "integer"
},
"mode": {
"default": "browse",
"description": "What 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.",
"editor": "select",
"enum": [
"browse",
"search",
"byCompany"
],
"enumTitles": [
"Browse the company directory",
"Search companies by name",
"Fetch specific companies"
],
"prefill": "browse",
"title": "Mode",
"type": "string"
},
"officeType": {
"default": "",
"description": "Filter 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.",
"editor": "select",
"enum": [
"",
"hybrid",
"on-site",
"remote"
],
"enumTitles": [
"All work arrangements",
"Hybrid",
"On-site",
"Fully remote"
],
"prefill": "",
"title": "Office type",
"type": "string"
},
"postedWithinDays": {
"description": "Keep 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.",
"maximum": 3650,
"minimum": 1,
"title": "Only job cards posted within (days)",
"type": "integer"
},
"remoteJobsOnly": {
"default": false,
"description": "Only return companies that currently list remote jobs on BuiltIn. Browse mode only; search/byCompany ignore it with a warning.",
"prefill": false,
"title": "Companies with remote jobs only",
"type": "boolean"
},
"searchQueries": {
"default": [],
"description": "Company 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.",
"editor": "stringList",
"prefill": [],
"title": "Search queries (mode=search)",
"type": "array"
},
"startUrls": {
"default": [],
"description": "Optional 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.",
"editor": "requestListSources",
"prefill": [],
"title": "Start URLs (BuiltIn directory or company profiles)",
"type": "array"
},
"technology": {
"default": "",
"description": "Filter companies by a technology they publish on BuiltIn. Browse mode only; search/byCompany ignore it with a warning.",
"editor": "select",
"enum": [
"",
"access",
"act",
"adobe-campaign",
"affinity-designer",
"aha",
"airtable",
"angular",
"angularjs",
"apache-groovy",
"apollo",
"asana",
"asp-net",
"assembly",
"aweber",
"aws",
"aws-redshift",
"axure",
"backbonejs",
"balsamiq",
"basecamp",
"big-query",
"bizible",
"bootstrap",
"c-sharp",
"caffe",
"cakephp",
"campain-monitor",
"canva",
"cassandra",
"chrous-ai",
"circleci",
"cocoa-touch",
"codeigniter",
"confluence",
"constant-contact",
"cpp",
"css",
"cypress",
"d3-js",
"dart",
"db2",
"digital-ocean",
"django",
"docker",
"docusign",
"dotnet",
"drift",
"drupal",
"dynamodb",
"elasticsearch",
"elixir",
"elm",
"emberjs",
"epic",
"express",
"figma",
"file-maker",
"firebase",
"flask",
"flex",
"flux",
"freshworks-suite",
"fullcontact",
"gatsby",
"github",
"gitlab",
"golang",
"google-analytics",
"google-cloud",
"google-docs",
"google-drive",
"google-hangouts",
"google-slides",
"graphql",
"grpc",
"hadoop",
"hbase",
"hive",
"hootsuite",
"hubspot",
"illustrator",
"informix",
"infusionsoft",
"insightly",
"insightsquared",
"intercom",
"invision",
"ionic",
"iterable",
"java",
"javascript",
"jest",
"jira",
"joomla",
"jquery",
"jquery-ui",
"jsf",
"jupyter",
"kafka",
"kentico",
"kissmetrics",
"kotlin",
"kubernetes",
"laravel",
"linkedin-salesnavigator",
"lodash",
"looker",
"magento",
"mailchimp",
"mailgun",
"mandrill",
"mariadb",
"marketo",
"matlab",
"memcached",
"meteor",
"microsoft-azure",
"microsoft-dynamics",
"microsoft-project",
"microsoft-sql-server",
"microsoft-teams",
"miro",
"mixpanel",
"mixrank",
"modemizr",
"monday-com",
"mongodb",
"mysql",
"neo4j",
"new-relic",
"next-js",
"node-js",
"nosql",
"oauth",
"objective-c",
"optimizely",
"oracle",
"oracle-eloqua",
"outreach",
"pandas",
"parse",
"perl",
"photoshop",
"php",
"pipedrive",
"pivotal-tracker",
"piwik",
"pixelmator",
"play",
"playwright",
"postgresql",
"python",
"r",
"rapportive",
"react",
"react-native",
"redis",
"redux",
"ruby",
"ruby-rails",
"rust",
"rx-js",
"sage",
"sailsjs",
"sales-loft",
"salesforce",
"salesforce-apex",
"salesforce-cpq",
"salesforce-pardot",
"sap-hana",
"sass",
"scala",
"scikit",
"sendgrid",
"shopify",
"sitecore",
"sketch",
"slack",
"smartsheet",
"snowflake",
"solid-works",
"solidity",
"spark",
"splash",
"spring",
"springcm",
"sql",
"sqlite",
"swift",
"symfony",
"tableau",
"tensor-flow",
"teradata",
"terraform",
"theano",
"torch",
"trello",
"troops",
"tuple",
"typescript",
"ux-pin",
"vuejs",
"vuex",
"webex-meetings",
"webflow",
"wordpress",
"wrike",
"zend",
"zeplin",
"zepto",
"zoho",
"zoom",
"zoom-info"
],
"enumTitles": [
"All technologies",
"Access",
"Act!",
"Adobe Campaign",
"Affinity Designer",
"Aha!",
"Airtable",
"Angular",
"Angular.js",
"Apache Groovy",
"Apollo",
"Asana",
"ASP.NET",
"Assembly",
"AWeber",
"AWS (Amazon Web Services)",
"AWS Redshift",
"Axure",
"Backbone.js",
"Balsamiq",
"Basecamp",
"BigQuery",
"Adobe Bizible",
"Twitter Bootstrap",
"C#",
"Caffe",
"CakePHP",
"Campaign Monitor",
"Canva",
"Cassandra",
"Chorus.AI",
"CircleCI",
"Cocoa Touch",
"CodeIgniter",
"Confluence",
"Constant Contact",
"C++",
"CSS",
"Cypress",
"D3JS",
"Dart",
"DB2",
"DigitalOcean",
"Django",
"Docker",
"DocuSign",
"dotnet",
"Drift",
"Drupal",
"DynamoDB",
"Elasticsearch",
"Elixir",
"Elm",
"Ember.js",
"EPIC",
"Express",
"Figma",
"FileMaker",
"Firebase",
"Flask",
"Flex",
"Flux",
"Freshworks Suite",
"FullContact",
"Gatsby",
"GitHub",
"GitLab",
"Golang",
"Google Analytics",
"Google Cloud",
"Google Docs",
"Google Drive",
"Google Hangouts",
"Google Slides",
"GraphQL",
"gRPC",
"Hadoop",
"HBase",
"Hive",
"HootSuite",
"HubSpot",
"Illustrator",
"Informix",
"InfusionSoft",
"Insightly",
"InsightSquared",
"Intercom",
"InVision",
"Ionic",
"Iterable",
"Java",
"JavaScript",
"Jest",
"JIRA",
"Joomla!",
"jQuery",
"jQuery UI",
"JSF",
"Jupyter",
"Kafka",
"Kentico",
"Kissmetrics",
"Kotlin",
"Kubernetes",
"Laravel",
"LinkedIn SalesNavigator",
"Lodash",
"Looker",
"Magento",
"MailChimp",
"Mailgun",
"Mandrill",
"MariaDB",
"Marketo",
"Matlab",
"Memcached",
"Meteor",
"Microsoft Azure",
"Microsoft Dynamics",
"Microsoft Project",
"Microsoft SQL Server",
"Microsoft Teams",
"Miro",
"Mixpanel",
"MixRank",
"Modemizr",
"Monday.com",
"MongoDB",
"MySQL",
"Neo4j",
"New Relic",
"Next.js",
"Node.js",
"NoSQL",
"OAuth",
"Objective-C",
"Optimizely",
"Oracle",
"Oracle Eloqua",
"Outreach",
"Pandas",
"Parse",
"Perl",
"Photoshop",
"PHP",
"Pipedrive",
"Pivotal Tracker",
"Piwik",
"Pixelmator",
"Play",
"Playwright",
"PostgreSQL",
"Python",
"R",
"Rapportive",
"React",
"React Native",
"Redis",
"Redux",
"Ruby",
"Ruby on Rails",
"Rust",
"RxJS",
"Sage",
"Sails.js",
"SalesLoft",
"Salesforce",
"Salesforce Apex",
"Salesforce CPQ",
"Salesforce Pardot",
"SAP HANA",
"Sass",
"Scala",
"Scikit",
"SendGrid",
"Shopify",
"Sitecore",
"Sketch",
"Slack",
"Smartsheet",
"Snowflake",
"SolidWorks",
"Solidity",
"Spark",
"Splash",
"Spring",
"SpringCM",
"SQL",
"SQLite",
"Swift",
"Symfony",
"Tableau",
"TensorFlow",
"Teradata",
"Terraform",
"Theano",
"Torch",
"Trello",
"Troops",
"Tuple",
"TypeScript",
"UXPin",
"Vue.js",
"Vuex",
"Webex Meetings",
"Webflow",
"Wordpress",
"Wrike",
"Zend",
"Zeplin",
"Zepto",
"Zoho",
"Zoom",
"ZoomInfo"
],
"prefill": "",
"title": "Technology",
"type": "string"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "BuiltIn Tech Company Directory & Hiring Signal Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
companies | string | optional | Dataset containing scraped BuiltIn company records and unresolved-input error rows. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "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.",
"properties": {
"companies": {
"description": "Dataset containing scraped BuiltIn company records and unresolved-input error rows.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Companies",
"type": "string"
}
},
"title": "BuiltIn Tech Company Directory & Hiring Signal Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Companies",
"transformation": {
"fields": [
"name",
"industries",
"searchLocation",
"matchedLocations",
"headquarters",
"employeeCount",
"techStackSize",
"openJobsCount",
"openJobsByCategoryIsPartial",
"isHiring",
"recentJobsSampleSize",
"jobCardsSampleSize",
"builtInUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
BuiltIn Tech Company Directory & Hiring Signal Scraper
BuiltIn is a US tech-career and company-research platform where employers publish their headcount, industries, office locations, technology stack, benefits and open roles. This actor turns that public directory into structured company records: browse by city, industry, technology, size and work arrangement, search companies by name, or fetch specific profiles. No account, cookie or proxy setup is needed.
What this actor does
- Three modes: browse the US company directory, search companies by name, or fetch specific companies by name, slug or BuiltIn URL
- Multi-city browse: pass one or more markets in
locations; the actor requests each market separately, unions the results and deduplicates companies by BuiltIn ID/slug - Start URLs: pass BuiltIn directory or company-profile URLs directly (plain strings or request-list-source objects) when you already know the pages you want
- Directory filters: 79 US city/metro markets, 103 industries, 213 technologies, six employee-size bands, hybrid/on-site/fully-remote work arrangements, and companies with open jobs or open remote jobs
- Company intelligence: headcount, industry tags, headquarters, every published office, founding year, website, logo, cover image, full description and tagline
- Tech and benefits: category-tagged technology stack plus the number of published benefits, with optional full benefit lists
- Hiring signals: whether the company is hiring, total open roles, open roles by category, and optional recent job listings
- Job freshness: optionally read each company's public jobs page for up to 20 recent job cards with job ID, title, approximate posted age, location and workplace type; filter them with
postedWithinDays - Honest signals: flags when category counts do not add up to the published total, when a listing description is used, when recent jobs are only a sample, and when job ages are approximate or open-ended
- Clean records: empty fields are omitted, not sent as
null
Output per company
companyId- BuiltIn's internal company IDname- company nameslug- BuiltIn profile slugbuiltInUrl- canonical BuiltIn company profile URLlogoUrl- company logo imagecoverImageUrl- company cover imagedescription- the company's published descriptiondescriptionIsTruncated-truewhendescriptionis the shorter directory-listing copy rather than the full profile descriptiontagline- the company's one-line pitchindustries[]- BuiltIn industry tagsemployeeCount- published employee countlocalEmployees- BuiltIn's published local-employee count when a location filter is used; omitted otherwisesearchLocation- the market whose browse request produced the record (city/metro title)matchedLocations[]- every requested market in which the company appeared; a single record is emitted per companyofficeCount- number of published officesoffices[]- office locations as readable stringsofficeLocations[]- structured offices withcity,state,country,postalCode,streetAddress,isHeadquartersheadquarters- headquarters locationheadquartersCity,headquartersState,headquartersCountry,headquartersPostalCodewebsiteUrl- the company's official websitefounded- founding yearworkModel-OnSite,HybridorRemotehybridDetails- published on-site pattern (onsiteType,onsiteValue)workplacePolicy- the company's published workplace-policy textintroHeader- the profile intro heading, when publishedwhyWorkWithUs- the company's published recruiting pitchtechStack[]- technologies withname,categoryandiconUrltechStackByCategory- technologies grouped by categorytechStackSize- number of published technologiesextraTechnologies[]- additional technologies withnameandcategorybenefitsCount- number of benefits shown in the directory listingperksCount- number of benefits recorded on the company profileperksOverview- the company's published benefits summaryperks[]- full published benefit list (withincludeBenefits)perkCategories[]- benefit category headings (withincludeBenefits)isHiring- whether the company currently has open rolesopenJobsCount- total open roles shown by BuiltIn; omitted if BuiltIn does not publish a total (counts are never inferred from categories)openJobsByCategory- open roles grouped by categoryopenJobsByCategoryIsPartial-truewhen the category counts are published but do not add up toopenJobsCountjobsUrl- the company's BuiltIn jobs pagerecentJobs[]- recent job cards from the company profile withtitle,jobId,workplaceTypeandlocation(withincludeProfileor in search/company modes)recentJobsSampleSize- number of recent job cards read from the profile; this is a sample, not the company's total open rolesjobCards[]- recent job cards from the public/company/{slug}/jobspage (withincludeJobCards):jobId,title,url,postedAge,postedAgeDaysApprox,postedAgeIsApproximate,postedAgeIsMinimum,workplaceTypeandlocationjobCardsSampleSize- number ofjobCardsreturned (can be0whenpostedWithinDaysremoves every card); the jobs page shows up to 20 recent cards, not the company's complete job boardjobCardsIsRecentSample-truebecausejobCardsis the recent page sample, not a claim that the full job board was scrapedjobCardsPostedWithinDays- thepostedWithinDayswindow applied tojobCards, when setproductAndTechEmployeeCount- product and technology headcount, when published (withincludeProfile)typicalTimeOnSite- published on-site expectation (withincludeProfile)lastUpdated- BuiltIn's last-updated timestampsourceUrl- the listing or profile page the record was read fromrecordType-companyfor company records,errorfor unresolved byCompany inputs or invalid start URLsscrapedAt- ISO 8601 scrape timestamp
Error rows (mode=byCompany and startUrls)
When a companyUrls input cannot be matched to an exact BuiltIn slug or name, the actor emits an error row with input, error, recordType: "error" and scrapedAt instead of returning a different company. The same happens for startUrls entries that are not BuiltIn directory or company-profile URLs.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | browse |
browse walks the directory, search looks companies up by name, byCompany fetches specific companies. startUrls takes precedence when set. |
searchQueries |
array | [] |
Company names or partial names to search for (mode=search). Browse-only filters are ignored in search mode with a warning. |
companyUrls |
array | [] |
Exact company URLs, slugs or names to fetch (mode=byCompany). Unresolved inputs become error rows. |
startUrls |
array | [] |
BuiltIn directory (/companies...) or company-profile (/company/...) URLs. Accepts plain strings or request-list-source objects with a url field. Directory URLs are paginated; ?page= is used as the first page. Other hosts/paths become error rows. |
locations |
array | [] |
Browse one or more markets. Each market is requested separately and results are unioned/deduplicated. Accepts the same aliases as location plus display titles. Overrides location when it contains a valid market. Browse only. |
location |
string | All US | Browse only. Single US city/metro market used when locations is empty. national and an empty value also mean all US. Ignored with a warning in search/byCompany. |
industry |
string | All | Browse only. BuiltIn industry filter. Ignored with a warning in search/byCompany. |
technology |
string | All | Browse only. Technology filter. Ignored with a warning in search/byCompany. |
companySize |
string | All | Browse only. Employee-count band: 1-10, 11-50, 51-200, 201-500, 501-1000 or 1000. Ignored with a warning in search/byCompany. |
officeType |
string | All | Browse only. hybrid, on-site or remote. Values such as On-Site, On Site and onsite normalize to OnSite; companies without a published work model are excluded when this filter is set. Ignored with a warning in search/byCompany. |
hiringOnly |
boolean | false |
Browse only. Only companies with at least one open job; companies without a hiring signal are excluded. Ignored with a warning in search/byCompany. |
remoteJobsOnly |
boolean | false |
Browse only. Only companies currently listing remote jobs. Ignored with a warning in search/byCompany. |
minEmployees |
integer | - | Drop companies below this published headcount. Companies without a count are kept. An inverted range (minEmployees > maxEmployees) stops the run with a clear status message. |
maxEmployees |
integer | - | Drop companies above this published headcount. Companies without a count are kept. An inverted range (minEmployees > maxEmployees) stops the run with a clear status message. |
includeDetails |
boolean | true |
Fetch each company's full BuiltIn record for tech stack, offices, headquarters, founding year, website and benefits count. Falls back to the profile page when detail is missing or has no tech stack. |
includeProfile |
boolean | false |
Also read each profile for recent jobs, on-site expectations and product/tech headcount. |
includeJobCards |
boolean | false |
Read each company's public /company/{slug}/jobs page and attach up to 20 recent job cards with approximate posted age. This is a recent-page sample, not the complete job board. Adds one request per company. |
postedWithinDays |
integer | - | Keep only job cards whose published relative age is within this many days (1-3650). Ages are approximate; cards with an unknown or open-ended age such as 30+ Days Ago are excluded. Enables includeJobCards automatically. |
includeBenefits |
boolean | false |
Read each company's benefits page and return the full benefit list. |
maxItems |
integer | 100 |
Hard cap on company records (1-10,000). Large runs with includeDetails on are slow; use false for bulk listing. For more than 10,000 companies, use filtered shards and merge by companyId/slug (see the FAQ). |
Example: fintech companies in Chicago
{
"mode": "browse",
"location": "chicago",
"industry": "fintech",
"maxItems": 50
}
Example: fintech companies across several markets
BuiltIn does not combine repeated city parameters, so locations runs one directory request per market and unions the results:
{
"mode": "browse",
"locations": ["chicago", "austin", "new-york-city"],
"industry": "fintech",
"maxItems": 150
}
Each company is emitted once. searchLocation is the market that produced the record and matchedLocations lists every requested market where it appeared.
Example: Python companies with 201-500 employees
{
"mode": "browse",
"technology": "python",
"companySize": "201-500",
"hiringOnly": true,
"maxItems": 100
}
Example: search for companies by name
{
"mode": "search",
"searchQueries": ["stripe", "notion", "datadog"],
"maxItems": 10
}
Example: fetch specific companies with benefits
{
"mode": "byCompany",
"companyUrls": ["https://builtin.com/company/stripe", "openai", "Notion"],
"includeBenefits": true
}
Example: companies with recent job cards
{
"mode": "byCompany",
"companyUrls": ["stripe", "notion", "datadog"],
"includeJobCards": true,
"postedWithinDays": 7
}
jobCards contains up to 20 recent cards from each public jobs page. postedWithinDays is applied to BuiltIn's relative age labels, so it is an approximate freshness filter rather than an exact posting-date cutoff.
Example: start from BuiltIn URLs
{
"mode": "browse",
"startUrls": [
"https://builtin.com/companies?city=Chicago&industry=fintech",
{ "url": "https://builtin.com/company/stripe" }
],
"maxItems": 50
}
Directory URLs are paginated from their ?page= value (or page 1); profile URLs are enriched directly. The actor does not follow non-BuiltIn hosts and emits them as error rows.
Use cases
- Talent acquisition - build city and industry lists of tech employers with open roles and published work arrangements
- Sales prospecting - find companies by size, location and technology stack for account-based outreach
- Market mapping - survey the tech-employer landscape and industry mix across US metros
- Competitive research - track headcount, office footprint, tech stack and hiring activity over time
- Recruiting research - compare benefits, work models and on-site expectations across target employers
- Technology adoption analysis - measure which companies publish a given language, framework, database or tool
FAQ
Do I need an account, cookie or API key? No. The directory, company profiles and search results used here are public. No login or key is required.
Do I need to configure a proxy? No. The actor connects to BuiltIn automatically. Just fill in the input and run it.
What is the difference between browse, search, byCompany and startUrls?
browse walks the directory and applies the filters. search matches company names and returns the closest matches. byCompany accepts only an exact slug or exact name match; unresolved inputs become error rows rather than a different company. startUrls skips the mode routes and reads the BuiltIn directory/profile URLs you supply.
Can I browse several cities in one run?
Yes. Put the markets in locations. BuiltIn does not OR repeated city parameters, so the actor makes a separate request per market, unions the companies and deduplicates by BuiltIn ID/slug. location remains the single-market fallback when locations is empty.
Why is openJobsByCategoryIsPartial set?
BuiltIn sometimes shows a total open-roles count that differs from the sum of the category links (for example, the total counts roles in categories the page does not list). The actor reports the published total as-is and sets the flag instead of inventing a new total.
Why is descriptionIsTruncated set?
The directory listing shows a shorter description than the full company profile. When includeDetails is off, or the profile has no longer description, the actor keeps the listing copy and flags it. A full detail/profile description clears the flag.
What does recentJobsSampleSize mean?
It is the number of job cards read from the profile, not the company's total number of open roles. Use openJobsCount for the published total.
What is the difference between recentJobs and jobCards?
recentJobs is a small sample read from the company profile with includeProfile. jobCards is read from the public /company/{slug}/jobs page with includeJobCards and includes the job's relative posted age. Both are samples; neither claims to be the complete job board.
Are job posting dates exact?
No. BuiltIn publishes relative labels such as 15 Hours Ago, 2 Days Ago, One Month Ago and 30+ Days Ago. The actor stores that label as postedAge, derives postedAgeDaysApprox, and sets postedAgeIsApproximate: true. It does not invent an exact postedAt timestamp. Open-ended labels keep postedAgeIsMinimum: true, and postedWithinDays excludes cards whose freshness cannot be confirmed.
Why do some companies have no employeeCount, founded or headquarters?
Those values are self-reported by companies. If a company has not published a value, the field is omitted rather than guessed.
Why is benefitsCount different from perksCount?
benefitsCount is the count shown in the directory listing. perksCount is the count recorded on the company profile. They can differ because BuiltIn maintains both views.
Why do some companies have no tech stack?
Companies choose what to publish. Companies with no published stack omit techStack and techStackSize.
Why are recentJobs, jobCards or perks missing?
recentJobs requires includeProfile (or a search/company lookup). jobCards requires includeJobCards (or postedWithinDays, which enables it). perks requires includeBenefits. Each option adds one request per company.
How many companies can one run return?
maxItems supports up to 10,000 records per run. BuiltIn serves 20 directory companies per page, and the source directory is larger than 10,000 companies. The cap is intentionally not raised because larger single runs mean thousands of sequential listing requests and a higher chance of an early block. The actor uses a page safety cap derived from maxItems plus a 50-page scan buffer, with a hard safety ceiling of 5,000 pages, and warns when it stops because of maxItems or the page cap. With multiple locations, the page cap applies per market.
How do I get more than 10,000 companies?
Use sharded runs for more than 10,000 companies: run several smaller jobs and merge the datasets by companyId (or slug). Each shard can use the full 10,000 cap:
{ "mode": "browse", "locations": ["chicago", "austin"], "industry": "fintech", "maxItems": 10000 }
{ "mode": "browse", "industry": "software", "technology": "python", "includeDetails": false, "maxItems": 10000 }
Shard by locations, industry, technology or a startUrls list. Keep includeDetails: false for the fastest listing-only pass, and deduplicate after merging because a company can appear in more than one market or filter. This is a supported workaround, not a claim that one run can enumerate the whole directory.
Does the actor rely on the ?page= parameter?
Yes. BuiltIn's public directory HTML exposes only 20 companies per page and paginates with ?page=N, so browse mode uses that parameter. BuiltIn's robots.txt for User-agent: * contains Disallow: *?page= (only /jobs*?page= is explicitly allowed), so this is a residual policy risk, not a robots-safe enumeration path. The actor stops a source on 403/429 and reports partial counts in the status message; it does not use translation proxies, mirror hosts, or a robots workaround.
The GraphQL filterCompanies endpoint was tested as an alternative on 2026-11-06. A single request works, but page=1 and page=2 overlapped by 16 IDs out of 100 and left gaps, perPage=5000 took about 53 seconds, and perPage=10000 failed. Because paginated enumeration is not reliable, the actor does not use it. The recent-job-card path reads /company/{slug}/jobs without a ?page= query. If robots compliance is mandatory for your use case, keep each run narrow (a market or industry shard with a low maxItems) and verify the current robots.txt before running.
How current is the data? Every run reads BuiltIn live. Company profiles are maintained by the companies themselves, so values reflect what they have published at run time.
What happens if a byCompany name does not match exactly?
The actor emits an error row with input and error instead of guessing. Paste the company's BuiltIn URL if its display name differs from its slug.
Does officeType need extra requests?
Yes. The work model is published on the company detail/profile, not the listing card. When officeType is set and includeDetails is off, the actor enables detail enrichment automatically and says so in the status message. Size bands are applied client-side from the published employee count, so the actor does not use BuiltIn's robots-disallowed /companies/size/... URLs.
Can I use the browse filters with search or byCompany?
No. locations, location, industry, technology, companySize, officeType, hiringOnly and remoteJobsOnly apply only to browse; in the other modes they are ignored with a clear warning in the status message. For startUrls, encode BuiltIn-side filters in the URL itself; the local minEmployees, maxEmployees, officeType and hiringOnly checks still apply to directory URLs.
Is this affiliated with BuiltIn? No. This is an independent, third-party actor that reads BuiltIn's public company directory and profiles. It is not affiliated with or endorsed by BuiltIn.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build VUzbe7joOuxTlVkch. Documentation is regenerated from the default published build; private drafts are not included.