# Built In Jobs Scraper — Hiring Intelligence Feed (`khadinakbar/built-in-jobs-scraper`) Actor

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.

- **URL**: https://apify.com/khadinakbar/built-in-jobs-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Built In Jobs Scraper

Extract structured technology and startup job listings from **Built In**. It turns Built In search pages and company job boards into a clean dataset of titles, companies, locations, work arrangements, salary ranges, skills, dates, job descriptions, and direct application links.

Use it for hiring intelligence, recruiter sourcing, compensation research, job-alert pipelines, and AI-agent workflows that need a bounded, machine-readable Built In jobs feed. It is designed for public listings only; it does not log in, submit applications, scrape candidate profiles, or collect private account data.

### What it returns

Each dataset item represents one job and uses a stable, flat shape suitable for CSV exports, databases, or Apify MCP clients.

| Field | Meaning |
| --- | --- |
| `title`, `companyName` | Published role and hiring company |
| `location`, `workplaceType`, `employmentType` | Work location and arrangement metadata |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Normalized compensation when Built In exposes it |
| `skills` | Deduplicated technologies or skills listed on the job |
| `experienceLevel` | Seniority inferred from the title where possible |
| `description` | Plain-text description preview or detail text |
| `postedAt`, `validThrough` | Published dates when available |
| `jobUrl`, `applyUrl` | Built In listing and direct employer application link |

The actor preserves a consistent schema even when an optional field is unavailable: optional values are `null`, while `skills` is always an array. It also writes `OUTPUT` and `RUN_SUMMARY` to the default key-value store after every run, including valid empty results and input diagnostics.

### When to use it

Use this actor when you need current Built In roles for:

- recruiters mapping companies hiring a role or technology;
- compensation analysts comparing published salary bands;
- founders monitoring competitor hiring activity;
- job-search tools that need structured roles and employer apply links; or
- an AI agent that needs a compact jobs dataset rather than a rendered results page.

Do not use it for LinkedIn, Indeed, candidate profiles, application automation, or non-Built In URLs. For a saved Built In query, provide that exact results or company-jobs URL through **Start URLs**. For a normal search, use the query and optional location inputs instead.

### Input

`searchQuery` is a normal Built In role or skill search. It defaults to `software engineer`, which is also the quality-test-safe prefill. `location` is optional and accepts a full location such as `Austin, TX`. `workplaceType` selects `any`, `remote`, `hybrid`, or `office`.

Set `maxResults` to bound the run and its event charges. The default is 20 and the hard cap is 100. `includeJobDetails` defaults to true, which visits job detail pages to collect descriptions, dates, salary data, skills, and direct apply links. Set it false for a faster card-level feed. `responseFormat` defaults to `concise`, limiting descriptions to 800 characters; use `detailed` for up to 5,000 characters.

#### Search example

```json
{
  "searchQuery": "machine learning engineer",
  "location": "Austin, TX",
  "workplaceType": "hybrid",
  "maxResults": 20,
  "includeJobDetails": true,
  "responseFormat": "concise"
}
````

#### Existing Built In results page

```json
{
  "startUrls": [{ "url": "https://builtin.com/jobs?search=ai" }],
  "maxResults": 10,
  "includeJobDetails": true
}
```

### Pricing and limits

The actor uses **Pay per event + usage**. It charges `$0.00005` for the actor start and `$0.003` only for each complete, validated `job-scraped` record persisted to the dataset. A 20-job run has a maximum event charge of `$0.060` plus the platform compute and proxy usage reported separately by Apify. The actor displays the maximum event charge before it begins work and never attempts a billable write beyond `maxResults`.

Built In is protected by Cloudflare. The actor uses residential Apify Proxy sessions and browser rendering for the advertised mode. When the target blocks every route before any usable job is returned, the run fails honestly as `UPSTREAM_FAILED` and preserves diagnostics in `RUN_SUMMARY`; it never disguises a block as an empty search. A valid search that completes with zero matching jobs ends successfully as `VALID_EMPTY`.

### API and MCP

Start a run through the Apify API with the same JSON input. The default dataset is the primary response surface; fetch it with the dataset URL from the run response. For agent use, prefer `responseFormat: "concise"` and a low `maxResults` so each item remains easy to reason over.

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~built-in-jobs-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"data engineer","workplaceType":"remote","maxResults":10}'
```

### Notes and compliance

Built In content, layout, availability, and bot controls can change. Use reasonable result caps and schedule monitoring runs conservatively. You are responsible for ensuring your use of exported data complies with applicable laws, the source website’s terms, and your internal privacy and retention policies. This actor extracts public job-listing information and does not bypass logins or collect account-only data.

For repeat monitoring, keep each saved task focused on a real hiring question—such as remote machine-learning roles or a specific company’s open jobs—and use the same bounded result cap. That makes changes between runs easy to compare and keeps both cost and downstream automation predictable.

# Actor input Schema

## `searchQuery` (type: `string`):

Use this when you want Built In jobs matching a role or skill phrase. Enter plain text such as 'machine learning engineer' or 'product manager'. Defaults to 'software engineer' and is URL-encoded before search. This is NOT a Built In URL; use Start URLs for an existing filtered results page.

## `location` (type: `string`):

Use this when the search should be limited to one Built In location. Enter a full city and state such as 'Austin, TX' or leave it empty for all locations. Defaults to an unrestricted search. This is NOT a country code or a remote-work toggle.

## `workplaceType` (type: `string`):

Use this when you need a Built In workplace arrangement filter. Choose 'any', 'remote', 'hybrid', or 'office'; default is 'any'. The scraper additionally returns the arrangement shown on each job. This is NOT a location search field.

## `startUrls` (type: `array`):

Use this when you already have a Built In jobs, category, or company-jobs page to scrape exactly. Add full URLs such as 'https://builtin.com/jobs?search=ai'. If empty, the actor builds a search from Job search query. This is NOT for external job-board URLs.

## `maxResults` (type: `integer`):

Use this to cap the total number of jobs returned and billed in the run. Choose an integer from 1 through 100; the user default is 20, while the automated quality-test prefill uses 1. Each persisted job costs $0.003 plus platform usage. This is NOT a per-page limit.

## `includeJobDetails` (type: `boolean`):

Use this to visit each job page for description, salary, skills, dates and apply URL. The user default is true; the automated quality-test prefill is false for a fast card-level canary. Card-level results still include title, company, location and job URL. This is NOT a way to skip search-result extraction.

## `responseFormat` (type: `string`):

Use this to control description length for agent workflows. Choose 'concise' for a short description preview or 'detailed' for up to 5,000 characters; default is 'concise'. Both formats keep the same job fields. This is NOT an output file-format setting.

## Actor input object example

```json
{
  "searchQuery": "machine learning engineer",
  "location": "Austin, TX",
  "workplaceType": "remote",
  "startUrls": [
    {
      "url": "https://builtin.com/jobs?search=ai"
    }
  ],
  "maxResults": 20,
  "includeJobDetails": true,
  "responseFormat": "concise"
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `output` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "software engineer",
    "location": "",
    "workplaceType": "any",
    "startUrls": [],
    "maxResults": 1,
    "includeJobDetails": false,
    "responseFormat": "concise"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/built-in-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "software engineer",
    "location": "",
    "workplaceType": "any",
    "startUrls": [],
    "maxResults": 1,
    "includeJobDetails": False,
    "responseFormat": "concise",
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/built-in-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "software engineer",
  "location": "",
  "workplaceType": "any",
  "startUrls": [],
  "maxResults": 1,
  "includeJobDetails": false,
  "responseFormat": "concise"
}' |
apify call khadinakbar/built-in-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/built-in-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Built In Jobs Scraper — Hiring Intelligence Feed",
        "description": "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.",
        "version": "1.1",
        "x-build-id": "STeeKjgavGJLBCeEF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~built-in-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-built-in-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~built-in-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-built-in-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~built-in-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-built-in-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Job search query",
                        "type": "string",
                        "description": "Use this when you want Built In jobs matching a role or skill phrase. Enter plain text such as 'machine learning engineer' or 'product manager'. Defaults to 'software engineer' and is URL-encoded before search. This is NOT a Built In URL; use Start URLs for an existing filtered results page.",
                        "default": "software engineer"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Use this when the search should be limited to one Built In location. Enter a full city and state such as 'Austin, TX' or leave it empty for all locations. Defaults to an unrestricted search. This is NOT a country code or a remote-work toggle.",
                        "default": ""
                    },
                    "workplaceType": {
                        "title": "Workplace type",
                        "enum": [
                            "any",
                            "remote",
                            "hybrid",
                            "office"
                        ],
                        "type": "string",
                        "description": "Use this when you need a Built In workplace arrangement filter. Choose 'any', 'remote', 'hybrid', or 'office'; default is 'any'. The scraper additionally returns the arrangement shown on each job. This is NOT a location search field.",
                        "default": "any"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Use this when you already have a Built In jobs, category, or company-jobs page to scrape exactly. Add full URLs such as 'https://builtin.com/jobs?search=ai'. If empty, the actor builds a search from Job search query. This is NOT for external job-board URLs.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "title": "Built In URL",
                                    "type": "string",
                                    "description": "A full Built In jobs, category, or company-jobs URL, for example 'https://builtin.com/jobs?search=ai'."
                                }
                            },
                            "required": [
                                "url"
                            ]
                        },
                        "default": []
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Use this to cap the total number of jobs returned and billed in the run. Choose an integer from 1 through 100; the user default is 20, while the automated quality-test prefill uses 1. Each persisted job costs $0.003 plus platform usage. This is NOT a per-page limit.",
                        "default": 20
                    },
                    "includeJobDetails": {
                        "title": "Fetch full job details",
                        "type": "boolean",
                        "description": "Use this to visit each job page for description, salary, skills, dates and apply URL. The user default is true; the automated quality-test prefill is false for a fast card-level canary. Card-level results still include title, company, location and job URL. This is NOT a way to skip search-result extraction.",
                        "default": true
                    },
                    "responseFormat": {
                        "title": "Response format",
                        "enum": [
                            "concise",
                            "detailed"
                        ],
                        "type": "string",
                        "description": "Use this to control description length for agent workflows. Choose 'concise' for a short description preview or 'detailed' for up to 5,000 characters; default is 'concise'. Both formats keep the same job fields. This is NOT an output file-format setting.",
                        "default": "concise"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
