# FAANG Job Search Scraper (`rl1987/faang-jobs`) Actor

Scrapes job listings by search query and location from Meta, Amazon, Apple, Netflix, and Google careers sites.

- **URL**: https://apify.com/rl1987/faang-jobs.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** Jobs
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job listings

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

**Scrape job listings from Meta, Amazon, Apple, Netflix, and Google** career sites in a single run. Give the FAANG Job Search Scraper a keyword and (optionally) a location, pick which companies to check, and it returns structured job postings — title, location, team, posting date, full description, responsibilities, qualifications, and pay/benefits where each site publishes them. Try it with a query like "software engineer" and see [live job listings](https://www.metacareers.com/jobsearch/) pulled straight from each company's own career site.

Instead of hitting rendered HTML pages, the Actor talks directly to each company's internal search API (or, for Google, the embedded JSON payload behind the rendered page) — faster and less brittle than screen-scraping. Running it on Apify gets you scheduling, an API to pull results programmatically, proxy rotation for the sites that need it, and monitoring if a site's API ever changes shape.

### Why use this scraper?

- **Multi-company job search in one place** — compare openings for the same role across five of the largest tech employers without visiting five different sites.
- **Structured data for analysis** — feed results into a spreadsheet, dashboard, or alerting pipeline instead of manually copy-pasting job posts.
- **Full posting text, not just titles** — responsibilities, qualifications, and (where disclosed) pay ranges are included, so you don't need to open every listing individually.
- **Recruiting and market research** — track how many roles a company has open for a given skill set, or watch for new postings on a schedule.

### How to use the FAANG Job Search Scraper

1. Click **Try for free** or set up a new run in the Apify Console.
2. Enter a **search query** (e.g. `"data engineer"`) — this is required.
3. Optionally enter a **location** (e.g. `"London"`, `"Seattle"`). Matching format varies by site — see the Input section below.
4. Pick one or more **sources** to scrape: Meta, Amazon, Apple, Netflix, Google.
5. Optionally set a **max items per source** cap (defaults to 100).
6. Click **Start** and view results in the **Dataset** tab once the run finishes, or pull them via the API.

### Input

| Field | Type | Description |
|---|---|---|
| `query` | string | Job title or keyword to search for. Required. |
| `location` | string | Office location or region filter. Optional — leave blank to search all locations. |
| `sources` | array | Which career sites to scrape: `meta`, `amazon`, `apple`, `netflix`, `google`. Select one or more. |
| `maxItemsPerSource` | integer | Maximum jobs to fetch per selected source (`0` = unlimited). Default `100`. |
| `proxyConfiguration` | object | Proxy settings. Apify Proxy is recommended, especially for Meta and Apple. |

Example input:

```json
{
  "query": "software engineer",
  "location": "London",
  "sources": ["meta", "amazon", "apple", "netflix", "google"],
  "maxItemsPerSource": 100
}
````

#### A note on location matching

Each site matches `location` differently — there's no universal format across all five:

- **Amazon**: free-text works loosely; exact country/region codes filter more precisely.
- **Apple**: matched against the site's own location autocomplete list; a bare city name that exists in multiple countries (e.g. "London") is disambiguated with a UK-first preference.
- **Netflix**: needs the exact geocoded string the site's own autocomplete would produce (e.g. `"London, England, United Kingdom"`); a bare city name may return zero results.
- **Meta**: matched against exact office names as listed on the careers site (e.g. `"London, UK"`).
- **Google**: passed straight through as the site's own `location` query param.

If a source returns fewer results than expected, try the fuller location string as it appears on that company's own careers page, or leave `location` blank to search everywhere.

#### A note on search relevance (fuzzy matching)

This Actor sends your `query` to each site's own search backend and returns exactly what that site would show a human visitor — it does not re-rank or filter results itself. Some of these search backends (Apple's in particular) do **fuzzy, relevance-based matching** rather than literal phrase matching: a query like `"web scraping"` can return hundreds of loosely-related engineering roles that don't literally contain those words, ranked by the site's own relevance score rather than by keyword match. A specific listing you're looking for may exist further down the result list (not on the first page) — raise `maxItemsPerSource` if you're not finding something you expect to be there. This is inherent to how each career site's search works, not a bug in the scraper.

### Output

Each dataset row is one job posting:

```json
{
  "source": "apple",
  "job_id": "200672712-2114",
  "title": "iCloud Platform - Senior Software Engineer",
  "company": "Apple",
  "location": "London, England, United Kingdom",
  "team": "Software and Services",
  "url": "https://jobs.apple.com/en-gb/details/200672712-2114/icloud-platform-senior-software-engineer",
  "posted_date": "21 Jul 2026",
  "description": "Imagine what you could do here. At Apple, great ideas have a way of becoming phenomenal products...",
  "responsibilities": "Design and build large-scale distributed systems...",
  "minimum_qualifications": "Comprehensive relevant industry experience...",
  "preferred_qualifications": "Excellent problem solving and analytical thinking skills...",
  "pay_and_benefits": null,
  "query": "software engineer",
  "search_location": "London"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
|---|---|
| `source` | Which site the job came from (`meta`, `amazon`, `apple`, `netflix`, `google`) |
| `job_id` | Source-specific job/requisition ID |
| `title` | Job title |
| `company` | Company name |
| `location` | Job location as reported by the source |
| `team` | Team or department, where available |
| `url` | Link to the live job posting |
| `posted_date` | Posting date, where available |
| `description` | Full job description text |
| `responsibilities` | Responsibilities section, where the source separates it out |
| `minimum_qualifications` | Required/minimum qualifications, where available |
| `preferred_qualifications` | Preferred/nice-to-have qualifications, where available |
| `pay_and_benefits` | Base pay range and benefits text, where the source discloses it (mainly US roles with legally required pay transparency) |
| `query` | The search query you provided |
| `search_location` | The location filter you provided |

Not every source populates every field — some sites (Netflix) return one combined description with everything inline rather than separate sections, and pay data is only published where legally required.

### How much does it cost to scrape job listings?

This Actor uses **pay-per-event** pricing: you're charged **$2 per 1,000 job listings** returned in the dataset ($0.002 per row), billed only for rows actually delivered — a run that returns 250 jobs costs $0.50, and a run that returns nothing costs nothing. There's no separate per-run or per-source fee.

Apify platform usage (compute, proxy, data transfer) for the run is also passed through, on top of the per-listing charge. Use `maxItemsPerSource` to cap costs upfront — e.g. 100 items × 5 sources = up to 500 listings ≈ $1. Check the **Pricing** tab on this Actor's page for the current rate.

### Tips for better results

- Start with a small `maxItemsPerSource` (10–20) to sanity-check your query and location before scaling up.
- Leave `location` blank for the broadest search, then narrow once you've confirmed the right format for the sources you care about.
- Select only the sources you need — running all five takes longer and costs more than running one or two.
- If a source returns unexpectedly few or irrelevant results, see the fuzzy-matching and location-format notes above before assuming something's broken.

### FAQ

**Is this legal?** This Actor only reads publicly available job listing pages and their backing APIs — the same data a visitor to each career site can already see. You're responsible for using scraped data in line with each site's terms of service and applicable law.

**Why do some fields come back empty?** Each source publishes a different amount of structured detail. See the Data fields table above for what's available per source.

**A job I expected isn't showing up — what's wrong?** Usually one of two things: `maxItemsPerSource` is too low to reach it (career sites rank results by their own relevance, not always by recency), or the `location` string doesn't match that source's expected format. See the notes above.

**Something looks broken or you have a feature request?** Open an issue in this Actor's Issues tab, or reach out for a custom scraping solution.

# Actor input Schema

## `query` (type: `string`):

Job title or keyword to search for (e.g. "software engineer").

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

Office location or region to filter by (e.g. "London", "United States"). How exactly this is matched (city, region, country) varies per source.

## `sources` (type: `array`):

Which companies' career sites to scrape. Select one or more.

## `maxItemsPerSource` (type: `integer`):

Maximum number of jobs to fetch from each selected source (0 = unlimited).

## `proxyConfiguration` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.

## Actor input object example

```json
{
  "query": "software engineer",
  "location": "",
  "sources": [
    "meta",
    "amazon",
    "apple",
    "netflix",
    "google"
  ],
  "maxItemsPerSource": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobs` (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 = {
    "query": "software engineer",
    "location": "",
    "sources": [
        "meta",
        "amazon",
        "apple",
        "netflix",
        "google"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/faang-jobs").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 = {
    "query": "software engineer",
    "location": "",
    "sources": [
        "meta",
        "amazon",
        "apple",
        "netflix",
        "google",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rl1987/faang-jobs").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 '{
  "query": "software engineer",
  "location": "",
  "sources": [
    "meta",
    "amazon",
    "apple",
    "netflix",
    "google"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rl1987/faang-jobs --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FAANG Job Search Scraper",
        "description": "Scrapes job listings by search query and location from Meta, Amazon, Apple, Netflix, and Google careers sites.",
        "version": "0.1",
        "x-build-id": "KAI7q9uSdcLMhEOqq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rl1987~faang-jobs/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rl1987-faang-jobs",
                "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/rl1987~faang-jobs/runs": {
            "post": {
                "operationId": "runs-sync-rl1987-faang-jobs",
                "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/rl1987~faang-jobs/run-sync": {
            "post": {
                "operationId": "run-sync-rl1987-faang-jobs",
                "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",
                "required": [
                    "query",
                    "sources"
                ],
                "properties": {
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Job title or keyword to search for (e.g. \"software engineer\").",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Office location or region to filter by (e.g. \"London\", \"United States\"). How exactly this is matched (city, region, country) varies per source.",
                        "default": ""
                    },
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Which companies' career sites to scrape. Select one or more.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "meta",
                                "amazon",
                                "apple",
                                "netflix",
                                "google"
                            ],
                            "enumTitles": [
                                "Meta",
                                "Amazon",
                                "Apple",
                                "Netflix",
                                "Google"
                            ]
                        },
                        "default": [
                            "meta",
                            "amazon",
                            "apple",
                            "netflix",
                            "google"
                        ]
                    },
                    "maxItemsPerSource": {
                        "title": "Max items per source",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of jobs to fetch from each selected source (0 = unlimited).",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
