# eFinancialCareers Jobs Scraper (`deriverge/efinancialcareers-jobs-scraper`) Actor

Finance and banking jobs from eFinancialCareers worldwide, with the salary split into numbers, currency and period, plus sector, position type and the full ad text. Search by keywords and a city or country, filter by sector or seniority, and schedule it to get only new jobs.

- **URL**: https://apify.com/deriverge/efinancialcareers-jobs-scraper.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.38 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## eFinancialCareers Jobs Scraper

eFinancialCareers is a job board for banking, asset management, trading, insurance and fintech. This actor returns one row per job: title, company, city and country, sector, position type, the salary as written and as numbers with currency and period, posting and expiry dates and the full ad text. Type `analyst` and `London`, then click **Start**. Outside the United States most employers write only "Competitive": in London 15% of jobs came with a salary. It costs $0.75 per 1,000 jobs on the Free plan ($0.375 on Business), and the $5 of monthly credit in Apify's Free plan covers about 6,600 jobs.

### Output fields

| Field | Description |
|---|---|
| `title`, `normalizedTitle` | Job title as the employer wrote it, e.g. `Prime Brokerage Risk Manager`, and eFinancialCareers' standard form of it, handy for grouping similar roles. |
| `company`, `companyLogo` | Hiring bank, fund or recruitment firm, and a link to its logo. About 1% of jobs have no company name. |
| `location`, `city`, `state`, `country`, `region` | Place as the site shows it, such as `London, United Kingdom`, split into city, state or county, country and world region (`Europe`, `North America`, `Asia`). |
| `employmentType`, `positionType` | `Full time` or `Part time`, and `Permanent`, `Contract`, `Temporary`, `Internships & Graduate Trainee` or `Self Employed`. |
| `workArrangement` | `Hybrid`, `In-Office`, `Remote`, `Flexible` or `Temporarily Remote`. Empty when the employer did not choose one. |
| `sectors`, `subSectors` | eFinancialCareers sectors such as `Risk Management` or `Equities`, and the narrower areas within them, such as `Market` or `Trading`. |
| `salaryText` | The salary line the employer wrote: `£90k - 120k per year`, `USD 24.00 - 25.50 per hour`, `Competitive`. |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | The same salary as numbers, e.g. `90000` to `120000` `GBP` `yearly`. Period is `yearly`, `monthly`, `weekly`, `daily` or `hourly`. Empty when the job has no amount. |
| `summary` | The short summary eFinancialCareers shows next to the ad. |
| `description` | The whole ad as plain text. Email addresses and phone numbers are replaced with `[email removed]` and `[phone removed]`. |
| `postedAt`, `expiresAt` | When the job was posted or last refreshed, and when the site plans to take it down, in UTC. |
| `externalApplication`, `featured` | `true` when applications go to the employer's own site, and `true` when the employer paid to highlight the job. |
| `url`, `jobId`, `key` | The job page on efinancialcareers.com, its numeric ID and a stable key `efc:<jobId>`. |

### How to scrape eFinancialCareers jobs

1. Type **Keywords** as on the website: a job title, skill or employer, such as `risk analyst`, `quant`, `KYC` or `private equity`. Leave it empty to list every job in a place.
2. Enter a **Location**: a city (`London`, `New York`, `Zurich`), a region or a whole country (`Germany`, `Singapore`). eFinancialCareers looks the name up itself and searches 40 km around a city unless you set **Radius (km)**. Without a location the search covers all countries.
3. Narrow it with **Sectors**, **Position types**, **Employment types**, **Work arrangement**, **Seniority**, **Posted within** and **Companies**. For pay, set **Minimum salary** with its **Salary currency**, or turn on **Only jobs with a salary**.
4. To repeat searches made on the website, paste their addresses into **Search links from efinancialcareers.com (optional)**, for example `https://www.efinancialcareers.com/jobs/compliance/in-hong-kong`. Links from national sites such as efinancialcareers.co.uk or efinancialcareers.sg work the same way.
5. Set **Maximum jobs** and click **Start**. Jobs appear in the **Output** tab as they come in; download them as CSV, Excel or JSON, or read them through the API. The `SUMMARY` record lists how many jobs matched, were read and returned per search.

As API input, permanent risk management jobs in London paying at least £100,000 a year, posted in the last week:

```json
{
  "keywords": "risk",
  "location": "London",
  "sectors": ["RISK_MANAGEMENT"],
  "positionTypes": ["PERMANENT"],
  "minSalary": 100000,
  "salaryCurrency": "GBP",
  "postedWithin": "7",
  "maxItems": 500
}
```

### Example output

One job from a London run on 11 October 2026. `summary` and `description` are cut short here; the dataset has the whole text.

```json
{
  "key": "efc:24809165",
  "jobId": "24809165",
  "title": "Prime Brokerage Risk Manager",
  "normalizedTitle": "Prime Brokerage Risk Manager",
  "url": "https://www.efinancialcareers.com/jobs-United_Kingdom-London-Prime_Brokerage_Risk_Manager.id24809165",
  "company": "Bruin",
  "companyLogo": "https://www.efinancialcareers.com/logo/c21d3961-7345-42e7-8b2f-d8ef72ed64fe.png",
  "location": "London, United Kingdom",
  "city": "London",
  "state": "England",
  "country": "United Kingdom",
  "region": "Europe",
  "employmentType": "Full time",
  "positionType": "Permanent",
  "workArrangement": null,
  "sectors": [
    "Equities",
    "Risk Management"
  ],
  "subSectors": [
    "Trading"
  ],
  "salaryText": "£90k - 120k per year",
  "salaryMin": 90000,
  "salaryMax": 120000,
  "salaryCurrency": "GBP",
  "salaryPeriod": "yearly",
  "summary": "Prime Brokerage Risk Manager role in London focused on supporting a growing financial services platform's prime brokerage business. The position combines front-office alignment with responsibility for risk management, margin...",
  "description": "Prime Brokerage Risk Manager | London An exciting opportunity has arisen for a Prime Brokerage Risk professional to join a growing and highly entrepreneurial financial services platform in London. This is a front-office aligned role with significant exposure to hedge fund and institutional clients, offering responsibility...",
  "postedAt": "2026-09-22T09:24:16.753Z",
  "expiresAt": "2026-10-22T23:45:00.000Z",
  "externalApplication": false,
  "featured": false,
  "searchQuery": "\"risk\" in London",
  "scrapedAt": "2026-10-11T16:05:07.229Z"
}
```

### How much does it cost to scrape eFinancialCareers jobs?

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 jobs | $0.75 | $0.60 | $0.488 | $0.375 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

A run that returns 10,000 jobs costs $7.50 on the Free plan and $3.75 on Business. Jobs removed by **Only jobs with a salary**, **Exclude keywords** or a posting window of 14 or 30 days are not charged, and neither is a job the site lists twice or one that the new-only mode skips.

### Limits

- One request returns up to 100 jobs and the actor sends at most one request per second. In October 2026, 3,000 jobs took 35 seconds; a London search for `analyst` over the last 3 days held 649 jobs and took 8 seconds.
- Salary coverage depends on the country. In October 2026 a salary amount came with 83% of New York risk jobs, 15% of London analyst jobs, 13% of Hong Kong jobs, 9% of jobs in Singapore and 8% in Germany. **Only jobs with a salary** reads all matches to find them: 300 Hong Kong jobs with pay took 2,261 jobs read.
- When the employer does not say the period, it is set from the amount and currency: £20,000 or more is yearly and £250 to £2,500 a daily contract rate, while Hong Kong and Singapore amounts in the monthly range (such as `HK$40k - HK$60k`) count as monthly. Amounts that fit no range keep an empty `salaryPeriod`.
- eFinancialCareers applies **Minimum salary** itself and only within one currency: a London search for `quant` with `GBP` and 100000 returned 115 jobs. Jobs paid in another currency or without a published salary drop out.
- `workArrangement` is filled on 7% of London jobs and 63% of jobs in Germany; the **Work arrangement** filter therefore drops many jobs that may still be hybrid or remote.
- With keywords, results come in order of relevance; without keywords, the newest jobs come first, and without a location United States jobs come first. **Seniority** works as a filter only: the level is not a field in the rows.
- A location eFinancialCareers does not know (a misspelling, a district name) stops that search with a warning; when no search could run, the run fails and nothing is charged.
- The actor reads only the search; it does not open job pages. If eFinancialCareers answers with a block or a bot protection challenge, the actor stops sending requests, keeps the jobs read so far and names the reason in the log and in `SUMMARY`.

### Daily alerts for new finance jobs

Turn on **Return only jobs new since the last run**, save the input as a task and schedule it every morning, or pass the same **Watch name** with each API call. Each run then returns only jobs that earlier runs under that name did not. In a test on 11 October 2026, the first run returned 649 London analyst jobs and the second, less than a minute later, returned none and skipped 648 (one was listed twice). A job stays on the list of known jobs for 90 days after it first came back, and jobs cut off by **Maximum jobs** come back next time.

### FAQ

#### Is it legal to scrape eFinancialCareers?

The actor reads the public job ads that efinancialcareers.com shows to every visitor, through the same search the website uses, without logging in. Rows describe jobs and companies; candidate profiles are never touched. Ads sometimes name a recruiter, and email addresses and phone numbers in the ad text are removed before the row is saved (29% of descriptions had at least one in October 2026). You are responsible for how you use the data, including eFinancialCareers' terms.

#### Which countries does it cover?

Every country eFinancialCareers lists. In October 2026 the largest groups by salary currency were euro (24,400 jobs), US dollar (22,000) and pound sterling (11,800), followed by India, Hong Kong, Singapore, Switzerland and Australia. Use a country name such as `Germany` or `India` in **Location** to stay in one country; the search then covers the whole country.

### Related scrapers

- [Dice Jobs Scraper](https://apify.com/deriverge/dice-jobs-scraper)
- [XING Jobs Scraper](https://apify.com/deriverge/xing-jobs-scraper)
- [Career Site Jobs Search](https://apify.com/deriverge/career-site-jobs-search)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/efinancialcareers-jobs-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `string`):

What to search for, as on efinancialcareers.com: a job title, skill or company, for example "risk analyst", "quant", "KYC" or "private equity". Leave empty for all jobs.

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

City, region or country, for example London, New York, Hong Kong, Singapore, Zurich or Germany. eFinancialCareers looks the place up itself; leave empty for all countries.

## `radius` (type: `integer`):

Search this many kilometres around the location. eFinancialCareers uses 40 km when this is empty.

## `searchUrls` (type: `array`):

Addresses of search result pages, for example https://www.efinancialcareers.com/jobs/risk-analyst/in-london. Each link is its own search; keywords, location, radius and filters are read from it.

## `sectors` (type: `array`):

Keep only jobs in these eFinancialCareers sectors. Leave empty for all.

## `positionTypes` (type: `array`):

Permanent, contract, temporary, internships and graduate programmes, or self-employed.

## `employmentTypes` (type: `array`):

Full time or part time.

## `workArrangements` (type: `array`):

Keep only jobs with one of these arrangements. Most employers leave it empty, so this filter removes many jobs.

## `seniority` (type: `array`):

Keep only jobs at these levels, as eFinancialCareers classifies them.

## `postedWithin` (type: `string`):

Keep only recently posted jobs. Today, 3 and 7 days are filtered by eFinancialCareers; 14 and 30 days by the posting date after the answer.

## `companies` (type: `array`):

Keep only jobs from these employers, written exactly as eFinancialCareers shows them, for example Citi, JPMorgan Chase & Co. or Goldman Sachs, Inc.

## `minSalary` (type: `integer`):

Keep only jobs whose published minimum salary is at least this amount, for example 100000. Needs a salary currency; jobs without a published salary drop out.

## `salaryCurrency` (type: `string`):

Currency of the minimum salary. eFinancialCareers compares salaries only within one currency, usually the currency of the job's country.

## `salaryOnly` (type: `boolean`):

Drop jobs whose salary is only "Competitive" or missing. Jobs with an hourly or daily rate stay.

## `excludeKeywords` (type: `array`):

Drop jobs whose title or company contains any of these, for example Intern or a recruitment agency.

## `newOnly` (type: `boolean`):

Keeps a list of jobs per watch name (or per saved task) and returns only jobs that earlier runs did not. Schedule it daily for a job alert.

## `watchName` (type: `string`):

Name of the job list used by the new-only mode, for example "london-risk". Runs from a saved task get one automatically.

## `maxItems` (type: `integer`):

Hard cap on returned jobs. eFinancialCareers listed about 70,000 jobs worldwide in October 2026.

## Actor input object example

```json
{
  "keywords": "analyst",
  "location": "London",
  "postedWithin": "any",
  "salaryOnly": false,
  "newOnly": false,
  "maxItems": 20
}
```

# Actor output Schema

## `jobs` (type: `string`):

One row per job with company, location, sector, salary, dates and the full description.

## `summary` (type: `string`):

Jobs matching, read and returned per search, what each filter dropped, and request counts.

# 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 = {
    "keywords": "analyst",
    "location": "London",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/efinancialcareers-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 = {
    "keywords": "analyst",
    "location": "London",
    "maxItems": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": "analyst",
  "location": "London",
  "maxItems": 20
}' |
apify call deriverge/efinancialcareers-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deriverge/efinancialcareers-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uWNk6oP8iZQYBBK1D/builds/nKBIHvxEvHULVYSTi/openapi.json
