# Adzuna Job Scraper (`shahidirfan/adzuna-job-scraper`) Actor

Automate Adzuna job scraping in seconds. Extract job listings, titles, salaries, companies, apply links & full descriptions. Built for job boards, recruiters & market research. Scale with zero limits.

- **URL**: https://apify.com/shahidirfan/adzuna-job-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Adzuna Remote Jobs Scraper

Collect remote-friendly job listings from Adzuna with clean, structured, analytics-ready output. Capture job identity, employer details, location metadata, compensation fields, and direct listing links at scale. This actor is built for hiring intelligence, recruiting operations, and remote-market tracking workflows.

### Features

- **Remote-focused collection** — Prioritizes remote opportunities and supports custom job queries.
- **Rich job metadata** — Captures role, company, category, location, timestamps, and salary fields.
- **Pagination support** — Continues collecting until your target result count is reached.
- **Duplicate-safe output** — Filters duplicate jobs for cleaner datasets.
- **Null-free records** — Omits empty values so datasets stay compact and production friendly.

### Use Cases

#### Talent Market Mapping
Track remote hiring demand by job title, geography, and contract pattern. Compare role volume across markets to guide recruitment strategy.

#### Lead Generation For Agencies
Build lists of active openings with employer names and canonical links. Route opportunities to recruiter outreach pipelines quickly.

#### Compensation Benchmarking
Analyze salary ranges and trends by role family and market. Use posted compensation signals to support pricing and offer strategy.

#### Product And Research Dashboards
Feed BI tools and internal dashboards with consistent, structured listings. Monitor remote hiring shifts over time with scheduled runs.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | `"https://www.adzuna.com/remote"` | Optional Adzuna start URL. |
| `keyword` | String | No | `"remote software engineer"` | Job keyword query. |
| `location` | String | No | `"United States"` | Location filter. |
| `country` | String | No | `"us"` | Adzuna market country code. |
| `remote_only` | Boolean | No | `true` | Keeps search focused on remote opportunities. |
| `url` | String | No | — | Alternative alias for `startUrl`. |
| `results_wanted` | Integer | No | `20` | Maximum number of jobs to collect. |
| `max_pages` | Integer | No | `10` | Safety limit on page traversal. |
| `proxyConfiguration` | Object | No | Apify Proxy enabled | Proxy settings for reliable collection. |
| `collectDetails` | Boolean | No | `true` | Compatibility option retained from earlier versions. |

---

### Output Data

Each dataset item can include:

| Field | Type | Description |
|-------|------|-------------|
| `id` | String | Unique job identifier. |
| `adref` | String | Listing reference token. |
| `title` | String | Job title. |
| `description` | String | Job description text. |
| `company_display_name` | String | Employer name. |
| `category_label` | String | Job category label. |
| `category_tag` | String | Job category tag. |
| `location_display_name` | String | Human-readable location. |
| `location_area` | Array | Location hierarchy from broad to specific. |
| `contract_type` | String | Contract type classification. |
| `contract_time` | String | Contract time classification. |
| `salary_min` | Number | Minimum salary, when available. |
| `salary_max` | Number | Maximum salary, when available. |
| `salary_avg` | Number | Average salary derived from min and max values. |
| `salary_is_predicted` | Boolean | Salary prediction indicator. |
| `description_truncated` | Boolean | Indicates when source description arrives as a short snippet. |
| `latitude` | Number | Latitude coordinate, when available. |
| `longitude` | Number | Longitude coordinate, when available. |
| `created` | String | Original listing creation timestamp. |
| `redirect_url` | String | Source redirect link. |
| `url` | String | Final canonical listing URL. |

---

### Usage Examples

#### Basic Remote Collection

```json
{
	"keyword": "remote software engineer",
	"location": "United States",
	"country": "us",
	"results_wanted": 20
}
````

#### Salary-Focused Search

```json
{
	"keyword": "remote data scientist",
	"location": "United Kingdom",
	"country": "gb",
	"results_wanted": 50
}
```

#### High-Volume Collection

```json
{
	"startUrl": "https://www.adzuna.com/remote",
	"keyword": "remote product manager",
	"country": "ca",
	"max_pages": 20,
	"results_wanted": 500,
	"remote_only": true,
	"proxyConfiguration": {
		"useApifyProxy": true,
		"apifyProxyGroups": [
			"RESIDENTIAL"
		]
	}
}
```

***

### Sample Output

```json
{
	"id": "5707560585",
	"adref": "adzuna-us-jobs-5707560585",
	"title": "Senior Software Engineer (Remote)",
	"description": "Build and scale distributed systems for global customers...",
	"company_display_name": "Acme Technologies",
	"category_label": "IT Jobs",
	"category_tag": "it-jobs",
	"location_display_name": "Austin, TX",
	"location_area": [
		"US",
		"Texas",
		"Austin"
	],
	"contract_type": "permanent",
	"contract_time": "full_time",
	"salary_min": 140000,
	"salary_max": 180000,
	"salary_avg": 160000,
	"salary_is_predicted": false,
	"description_truncated": false,
	"latitude": 30.2672,
	"longitude": -97.7431,
	"created": "2026-04-10T17:22:11Z",
	"redirect_url": "https://www.adzuna.com/land/ad/5707560585?...",
	"url": "https://www.adzuna.com/land/ad/5707560585?..."
}
```

***

### Tips For Best Results

#### Start With A Narrow Query

- Begin with role-specific keywords like `remote backend engineer`.
- Add broad terms only after verifying output quality.

#### Scale Safely

- Use `results_wanted: 20` for quick validation.
- Increase `results_wanted` and `max_pages` for production runs.

#### Improve Reliability

- Enable residential proxies for consistent throughput.
- Use country-specific runs to keep results relevant and stable.

#### Keep Queries Clean

- Use precise job titles for higher-quality matches.
- Use `location` and `country` together for tighter relevance.

***

### Integrations

Connect your dataset with:

- **Google Sheets** — Track live hiring trends in shared spreadsheets.
- **Airtable** — Build searchable recruiting databases.
- **Make** — Trigger downstream automations from new listings.
- **Zapier** — Push jobs into CRM and alerting workflows.
- **Webhooks** — Forward results into custom internal systems.

#### Export Formats

- **JSON** — Developer-friendly structured output.
- **CSV** — Spreadsheet analysis and bulk operations.
- **Excel** — Business reporting and ad hoc review.
- **XML** — Legacy system integrations.

***

### Frequently Asked Questions

#### How many jobs can I collect in one run?

You can collect large volumes by increasing `results_wanted` and `max_pages`. Start with smaller runs for tuning, then scale up.

#### Why are some fields missing in certain records?

Listings vary by employer and market. Empty values are automatically skipped to keep each record clean.

#### Why do some job descriptions end with `...`?

Some listings are delivered by the source as shortened snippets. The actor marks these with `description_truncated: true` and keeps the listing URL so you can open the full posting when available.

#### Can I target multiple countries?

Yes. Run the actor separately for each `country` code and merge datasets downstream.

#### Is duplicate data removed?

Yes. The actor performs duplicate filtering during collection to keep output efficient.

#### Can I schedule this actor?

Yes. You can schedule periodic runs from Apify to maintain fresh datasets.

***

### Support

For issues, improvements, or feature requests, use the Apify actor discussion and issue channels.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Apify Scheduling](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for legitimate data collection and analytics workflows. Users are responsible for complying with applicable laws, platform terms, and responsible data handling practices.

# Actor input Schema

## `startUrl` (type: `string`):

Optional Adzuna start URL. You can pass https://www.adzuna.com/remote or a prepared search URL.

## `keyword` (type: `string`):

Search keyword for jobs.

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

Optional location filter.

## `country` (type: `string`):

Two-letter Adzuna market code.

## `remote_only` (type: `boolean`):

If enabled, the search keyword is constrained to remote opportunities.

## `collectDetails` (type: `boolean`):

Compatibility option retained from previous version.

## `results_wanted` (type: `integer`):

Maximum number of jobs to collect.

## `max_pages` (type: `integer`):

Safety cap for pagination.

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

Use Apify Proxy for reliable access.

## Actor input object example

```json
{
  "startUrl": "https://www.adzuna.com/remote",
  "keyword": "remote software engineer",
  "location": "United States",
  "country": "us",
  "remote_only": false,
  "collectDetails": true,
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrl": "https://www.adzuna.com/remote",
    "keyword": "remote software engineer",
    "location": "United States",
    "country": "us",
    "remote_only": false,
    "results_wanted": 20,
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/adzuna-job-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 = {
    "startUrl": "https://www.adzuna.com/remote",
    "keyword": "remote software engineer",
    "location": "United States",
    "country": "us",
    "remote_only": False,
    "results_wanted": 20,
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/adzuna-job-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 '{
  "startUrl": "https://www.adzuna.com/remote",
  "keyword": "remote software engineer",
  "location": "United States",
  "country": "us",
  "remote_only": false,
  "results_wanted": 20,
  "max_pages": 5
}' |
apify call shahidirfan/adzuna-job-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Adzuna Job Scraper",
        "description": "Automate Adzuna job scraping in seconds. Extract job listings, titles, salaries, companies, apply links & full descriptions. Built for job boards, recruiters & market research. Scale with zero limits.",
        "version": "0.0",
        "x-build-id": "C5IFsTEp0eMss6Eqq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~adzuna-job-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-adzuna-job-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/shahidirfan~adzuna-job-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-adzuna-job-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/shahidirfan~adzuna-job-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-adzuna-job-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": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Optional Adzuna start URL. You can pass https://www.adzuna.com/remote or a prepared search URL."
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Search keyword for jobs."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional location filter."
                    },
                    "country": {
                        "title": "Country Code",
                        "enum": [
                            "us",
                            "gb",
                            "in",
                            "ca",
                            "au",
                            "de",
                            "fr",
                            "nl",
                            "pl",
                            "it",
                            "es",
                            "sg",
                            "br",
                            "mx",
                            "nz",
                            "ch",
                            "be",
                            "za"
                        ],
                        "type": "string",
                        "description": "Two-letter Adzuna market code.",
                        "default": "us"
                    },
                    "remote_only": {
                        "title": "Remote Only",
                        "type": "boolean",
                        "description": "If enabled, the search keyword is constrained to remote opportunities.",
                        "default": false
                    },
                    "collectDetails": {
                        "title": "Collect Job Details",
                        "type": "boolean",
                        "description": "Compatibility option retained from previous version.",
                        "default": true
                    },
                    "results_wanted": {
                        "title": "Maximum Number Of Jobs",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of jobs to collect.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum Number Of Pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap for pagination.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliable access.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
