# eFinancialCareers Scraper — Finance Jobs, Salaries & Companies (`studio-amba/efinancialcareers-scraper`) Actor

Scrape finance job listings from eFinancialCareers: titles, companies, locations, salaries, employment types, and full descriptions across countries. Fast JSON-API access, no login, no browser.

- **URL**: https://apify.com/studio-amba/efinancialcareers-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## eFinancialCareers Scraper

Extract **finance job listings from [eFinancialCareers](https://www.efinancialcareers.com/)**, the leading job board for banking, markets, fintech and finance careers worldwide. eFinancialCareers covers roles at investment banks, hedge funds, asset managers, private equity firms and fintechs across London, New York, Hong Kong, Singapore and dozens of other financial centres.

This Actor pulls **job titles, companies, locations, posting language, salary ranges, employment types, posting dates, and full job descriptions** directly from eFinancialCareers' JSON search API. No login, no cookies, no browser automation. It reads structured data straight from the source, so runs are fast and stable.

A distinctive extra: **the full job description is already included in the search response**. Most job-board scrapers need a second request per listing to fetch the detail page. This one doesn't — every field comes back in a single API call per page, so runs stay quick even at scale.

### What does eFinancialCareers Scraper do?

Give it a keyword (for example `analyst`, `trader`, `risk`, `quant`, or `compliance`) and a two-letter country code (`GB`, `US`, `DE`, `FR`, `SG`, `HK`, and more). The Actor queries eFinancialCareers' search API, paginates through the results, and returns clean, structured records you can download as JSON, CSV, Excel, or HTML — or pull through the Apify API into your own systems.

Because it runs on the Apify platform, you also get scheduling, monitoring, proxy rotation, and integrations (webhooks, Make, Zapier, Google Sheets) out of the box.

### Why use eFinancialCareers Scraper?

- **Finance-specific.** Every listing is a banking, markets, asset management, or fintech role — no aggregated noise from unrelated industries.
- **Global coverage.** One Actor, dozens of countries — switch `countryCode2` to cover London, New York, Hong Kong, Singapore, Frankfurt, and more.
- **Full descriptions, one request per page.** The complete job text is in the search response, so there's no slow detail-page crawl.
- **Labour-market research.** Track hiring demand by role, region, or employer over time in the finance sector.
- **Recruitment and sourcing.** Build lead lists of financial institutions actively hiring for specific roles.
- **Job aggregators.** Feed a niche finance job board or newsletter with fresh, structured listings.
- **No anti-bot headaches.** The API is open, so runs are quick and reliable.

### How to scrape eFinancialCareers data

1. Open the Actor and go to the **Input** tab.
2. Enter a **Search Query** keyword (e.g., `analyst`, `trader`, `risk`, `private equity`).
3. Set **Country Code** to the market you want (e.g., `GB` for the UK, `US` for the United States, `DE` for Germany, `SG` for Singapore).
4. Set **Max Results** to control how many listings you want.
5. Click **Start**. When the run finishes, open the **Output** tab and download your data as JSON, CSV, Excel, or HTML.

That's it. You can also schedule the Actor to run daily and feed new listings into your own pipeline.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `searchQuery` | string | Keyword to search for. Defaults to `analyst`. |
| `countryCode2` | string | Two-letter country code to search in. Defaults to `GB`. |
| `maxResults` | integer | Maximum number of job listings to return (default 100). |
| `proxyConfiguration` | object | Proxy settings. Apify's default auto proxy works well. |

#### Example input

```json
{
  "searchQuery": "analyst",
  "countryCode2": "GB",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### Output

Each job is returned as one dataset record. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Example output item

```json
{
  "jobId": "24313799",
  "jobTitle": "Analyst",
  "company": "Apollo Global Management, Inc.",
  "companyLogoUrl": "https://www.efinancialcareers.com/logo/9aeb738f-2d43-4805-a884-f5b6b81aecf0.jpeg",
  "location": "London, United Kingdom",
  "locationRaw": "London, United Kingdom",
  "locationParsed": { "city": "London", "country": "United Kingdom" },
  "country": "United Kingdom",
  "language": "EN",
  "salary": "120000-160000 USD",
  "employmentType": "Full time",
  "postedDate": "2026-05-29T07:09:15.257Z",
  "jobDescription": "Position Overview The Apollo Capital Solutions Syndication team is seeking a detail-oriented Analyst to support all aspects of the syndication process and broader capital markets activities...",
  "descriptionSnippet": "Position Overview The Apollo Capital Solutions Syndication team is seeking a detail-oriented Analyst to support all aspects of the syndication process and broader capital markets activities across primary and secondary...",
  "url": "https://www.efinancialcareers.com/jobs-United_Kingdom-London-Analyst.id24313799",
  "scrapedAt": "2026-07-13T09:00:00.000Z"
}
```

#### Data fields

| Field | Description |
| --- | --- |
| `jobId` | eFinancialCareers internal job ID |
| `jobTitle` | Job posting title |
| `company` | Hiring company or organisation |
| `companyLogoUrl` | URL of the company logo, when available |
| `location` | City, state and country of the workplace, as reported by eFinancialCareers' regional careers feed |
| `locationRaw` | Same value as `location` — the feed's own location string, kept verbatim |
| `locationParsed` | Best-effort real job location `{city, country}`, parsed from the posting's own description text. See "Location: feed vs. real job" below |
| `country` | Country of the workplace, per the regional feed (same caveat as `location`) |
| `language` | Posting language as reported by eFinancialCareers (e.g. `EN`, `FR`, `DE`) |
| `salary` | Salary range and currency, only present when the employer stated one |
| `employmentType` | Employment type such as Full time, Part time, Contract |
| `postedDate` | ISO 8601 date the job was posted |
| `jobDescription` | Full job description as plain text (capped at 3,000 characters) |
| `descriptionSnippet` | Short 300-400 character preview of the description, stripped of HTML, for quick relevance screening without reading the full text |
| `url` | eFinancialCareers job page URL |
| `scrapedAt` | ISO 8601 collection timestamp |

#### Location: feed vs. real job

eFinancialCareers' search API organises job listings by **regional careers feed**, not always by the job's actual city. In practice this means `location` (and `country`) can be misleading — for example, a job filed under the Luxembourg feed can genuinely be based in Eschborn, Germany. The API gives no separate "true location" field, so `location`/`locationRaw` will keep showing the feed's value.

`locationParsed` is a best-effort fix: it scans the job's own description text for an explicit statement of where the role is based (phrases like "this role is based in..."), falling back to any recognised finance-hub city named in the text, and only falls back to the feed's own location when the description doesn't name a city at all. It won't be perfect on every listing — descriptions don't always spell out a location — but it catches the feed-vs-reality mismatch far more often than the raw feed field alone.

#### Duplicate listings

The same job sometimes appears under more than one `jobId` (eFinancialCareers occasionally re-lists a posting, or the same role is cross-posted to more than one regional feed). If you're deduplicating downstream, don't dedupe on `jobId` — dedupe on `company` + `jobTitle` instead.

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

The Actor reads a lightweight JSON API and pulls up to 50 jobs per request, so runs are cheap and fast. A run of a few hundred listings typically finishes in under a minute. Pricing follows this Actor's pay-per-result configuration on the Apify Store — check the pricing box on the Actor page for the current rate. Larger runs scale linearly with the number of results.

### Tips and advanced options

- **Broad keywords go far.** Terms like `analyst`, `trader`, or `risk` return tens of thousands of results across a single country — narrow with a more specific title if you only need a slice.
- **Country coverage.** eFinancialCareers lists roles in dozens of markets. Try `GB`, `US`, `DE`, `FR`, `SG`, `HK`, `CH`, and more.
- **Salary availability varies.** Many listings don't state a salary (`salary` is simply omitted from the record); when a range is stated, it comes through in the job's native currency.
- **No detail-page crawl needed.** The full description is already in the search response, which keeps runs fast even for large `maxResults`.

### FAQ, disclaimers, and support

**Is scraping eFinancialCareers legal?** This Actor reads the same JSON API that eFinancialCareers' own website uses to display public job listings. Use the data responsibly and in line with applicable terms and data-protection law. You are responsible for how you use the extracted data.

**Do I need an account or API key?** No. The Actor handles API access for you. No login or cookies are required.

**Why is `salary` missing on some jobs?** Not every employer states a salary range. When the API returns no salary data for a listing, the field is left out of that record rather than filled with a placeholder.

**Something's not working.** Open an issue on the Actor's **Issues** tab with your input and the run link. Custom fields or a tailored version can also be arranged.

### Related scrapers

- [Jobware Scraper](https://apify.com/studio-amba/jobware-scraper) — German professional job board with salary data
- [StepStone Scraper](https://apify.com/studio-amba/stepstone-scraper) — Germany's leading commercial job board
- [Arbeitsagentur Scraper](https://apify.com/studio-amba/arbeitsagentur-scraper) — Germany's Federal Employment Agency job board
- [Xing Jobs Scraper](https://apify.com/studio-amba/xing-jobs-scraper) — German-speaking professional network job listings

# Actor input Schema

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

Keyword to search for. Examples: 'analyst', 'trader', 'risk', 'quant', 'compliance', 'private equity'.

## `countryCode2` (type: `string`):

Two-letter country code to search in (e.g. GB, US, DE, FR, SG, HK).

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

Maximum number of job listings to return.

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

Proxy settings. The eFinancialCareers API is open and works well through Apify's default auto proxy.

## Actor input object example

```json
{
  "searchQuery": "analyst",
  "countryCode2": "GB",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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": "analyst",
    "countryCode2": "GB",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/efinancialcareers-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": "analyst",
    "countryCode2": "GB",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/efinancialcareers-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": "analyst",
  "countryCode2": "GB",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/efinancialcareers-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/M0gUq4rMq46l0XTYn/builds/6870eUeAKWoadwFS5/openapi.json
