# eFinancialCareers Scraper (`santamaria-automations/efinancialcareers-scraper`) Actor

Scrape finance and banking jobs from eFinancialCareers (US and UK) by keyword and city. Returns title, company, salary min/max, sectors, seniority, work arrangement, apply URL and dates. Detail mode adds description, skills, reference, company profile and recruiter contacts. Pay per event.

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

## Pricing

from $1.00 / 1,000 actor starts

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/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 Scraper - Finance & Banking Jobs (US, UK)

Pull finance jobs from [eFinancialCareers](https://www.efinancialcareers.com) (US) and [eFinancialCareers UK](https://www.efinancialcareers.co.uk) by keyword and city. Each record has the job title, employer, location, salary min and max with currency, sectors, seniority, work arrangement, dates, and the job and apply URLs. With detail mode on you also get the full description as text, HTML and markdown, the skill list, the employer reference number, the external apply link, map coordinates, the employer profile (industry, headcount, about, benefits) and the recruiters listed on that profile. No API key required.

### Sample output

```json
[
  {
    "id": "CM65tbfgbseErI2D",
    "job_id": "24641640",
    "title": "Vice President, Investment Banking (Healthcare)",
    "company": "Jefferies",
    "company_name": "Jefferies",
    "company_full_name": "Jefferies Financial Group Inc.",
    "location": "New York, United States",
    "city": "New York",
    "region": "New York",
    "country": "US",
    "employment_type": "full-time",
    "position_type": "Permanent",
    "seniority": "Vice President",
    "work_arrangement": "hybrid",
    "remote_option": "hybrid",
    "job_function": "Investment Banking",
    "sectors": ["INVESTMENT_BANKING/M_A", "INVESTMENT_BANKING/HEALTHCARE"],
    "salary_min": 250000,
    "salary_max": 325000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": "USD 250,000 - 325,000 per year",
    "bonus_eligible": true,
    "visa_sponsorship": false,
    "description_snippet": "Jefferies is seeking a Vice President for the Healthcare Investment Banking group in New York...",
    "description_full": "Jefferies is seeking a Vice President for the Healthcare Investment Banking group...",
    "description_html": "<b>About the Role</b> <br /> Jefferies is seeking...",
    "description_md": "**About the Role**\n\nJefferies is seeking...",
    "posted_at": "2026-09-29",
    "posted_at_datetime": "2026-09-29T09:35:04.347Z",
    "originally_posted_at": "2026-09-17T09:25:06Z",
    "expires_at": "2027-01-27",
    "job_url": "https://www.efinancialcareers.com/jobs-United_States-NY-New_York-Vice_President.id24641640",
    "source_url": "https://www.efinancialcareers.com/jobs-United_States-NY-New_York-Vice_President.id24641640",
    "apply_url": "https://www.efinancialcareers.com/jobs-United_States-NY-New_York-Vice_President.id24641640",
    "external_apply_url": "https://jefferies.wd5.myworkdayjobs.com/en-US/careers/job/New-York/Vice-President_329776-2",
    "is_external_application": true,
    "reference_number": "329776",
    "skills": ["M&A", "Financial Modeling", "Healthcare", "Due Diligence"],
    "latitude": 40.71277,
    "longitude": -74.00597,
    "company_industry": "Investment Banking",
    "company_headquarters": "New York, New York, United States",
    "employee_count": 7000,
    "company_recruiters": [
      {
        "name": "Jane Example",
        "title": "Head of Talent Acquisition",
        "email": "jane.example@jefferies.com",
        "profile_url": "https://www.efinancialcareers.com/profile?id=abc123"
      }
    ],
    "source_platform": "efinancialcareers",
    "search_query": "investment banking vp in New York",
    "scraped_at": "2026-09-29T12:34:56Z"
  }
]
```

Fields marked "detail mode" below are empty unless `includeJobDetails` is on.

### Input

No API key needed. Enter one or more finance-role keywords and pick a country site.

```json
{
  "searchQueries": ["investment banking analyst", "quantitative analyst"],
  "location": "London",
  "country": "gb",
  "sortBy": "newest",
  "maxResults": 100,
  "maxResultsPerQuery": 50,
  "includeJobDetails": true
}
```

| Field | Type | Required | Description | Example |
|-------|------|----------|-------------|---------|
| `searchQueries` | array | No | Finance-role keywords. Each runs as a separate search, results are labelled in `search_query`. Empty lists the newest finance jobs. | `["private equity associate"]` |
| `location` | string | No | City or region filter applied to every query. Empty means the whole site (UK site: United Kingdom, US site: worldwide). | `London` |
| `country` | string | No | `us` for efinancialcareers.com, `gb` for efinancialcareers.co.uk. Default `us`. | `gb` |
| `sortBy` | string | No | `newest` (default) orders the best matches for each keyword by posting time, newest first. `relevance` keeps the site's own ranking. | `newest` |
| `maxResults` | integer | No | Total cap across all queries. Default 25. | `200` |
| `maxResultsPerQuery` | integer | No | Cap per keyword. Set it below `maxResults` so every keyword gets rows. Default 100. | `50` |
| `includeJobDetails` | boolean | No | Fetch each detail page for the fields marked detail mode. Default false. | `true` |
| `maxConcurrency` | integer | No | Concurrent detail-page requests (1 to 20). Only used with `includeJobDetails`. Default 5. | `5` |

An empty input `{}` works: it returns the 25 newest finance jobs on the US site.

### Output fields

**Core**

- `id`: Stable dataset ID.
- `job_id`: eFinancialCareers numeric job ID.
- `title`: Job title as advertised. `title_normalized` holds the site's normalized title for grouping.
- `location`, `city`, `region`: Location as published. `country` is ISO alpha-2 uppercase.
- `job_url` and `source_url`: Public job page (identical). `apply_url` is the same page, because applying on eFinancialCareers needs a login.
- `external_apply_url`: The employer's own application link when it leaves the site (detail mode).
- `is_external_application`: True when applying routes to the employer's career site.
- `reference_number`: Employer requisition number (detail mode).
- `source_platform`: Always "efinancialcareers".

**Company**

- `company` and `company_name`: Brand name (same value).
- `company_full_name`: Legal name, useful for CRM matching.
- `company_logo_url`, `company_cover_image`: Employer images where available.
- `company_industry`, `company_year_founded`, `employee_count`, `company_about`, `company_headquarters`, `company_benefits`: From the employer profile (detail mode, employers that have a profile).
- `company_profile_url`: eFinancialCareers page listing the employer's jobs (detail mode).
- `company_recruiters`: Recruiters listed on the employer's public profile, each with `name`, `title`, `email`, `profile_url` (detail mode). These are company-level contacts, not tied to one job. Many small employers have none.

**Role**

- `employment_type`: full-time, part-time, contract, permanent and so on.
- `position_type`: Original site value, for example "Permanent".
- `seniority`: Derived from the job title (Analyst, Associate, Assistant Vice President, Vice President, Director, Managing Director). Null when the title has no level keyword.
- `experience_level`: Always null. The site does not publish an experience band per job.
- `work_arrangement` and `remote_option`: on-site / hybrid / remote (`onsite` in `remote_option`). Null when the advert does not say.
- `job_function`: Derived from the primary sector.
- `sectors`: Full list of sector tags.
- `skills`: Skill keywords listed on the advert (detail mode).
- `bonus_eligible`, `visa_sponsorship`: Inferred from description wording. Treat as hints.
- `latitude`, `longitude`: Job location coordinates (detail mode).

**Salary**

- `salary_min`, `salary_max`: Numeric bounds. Read from the salary text when it shows a range. For adverts that say "Competitive" the site often still supplies an estimated band, treat it as indicative.
- `salary_currency`: ISO code (USD, GBP, EUR, HKD, SGD).
- `salary_period`: "year".
- `salary_text`: Display string. "Competitive" is common for senior roles.

**Description**

- `description_snippet`: First 500 characters.
- `description_full`: Clean text body. Search results already carry the full text.
- `description_html`, `description_md`: HTML body and markdown body (detail mode; `description_md` equals the plain text in search-only mode).
- `job_summary`: Short summary written by eFinancialCareers.

**Dates and metadata**

- `posted_at`: ISO date of the latest posting or refresh, and `posted_at_datetime` the full timestamp.
- `originally_posted_at`: When the advert was first published (detail mode). Recruiters refresh adverts, so this can be days before `posted_at`.
- `expires_at`: ISO date the listing expires. Null for evergreen adverts.
- `search_query`: The keyword and location string that produced this row.
- `scraped_at`: ISO timestamp when the record was written.

### Pricing

Pay per event.

| Event | Price |
|-------|-------|
| Actor start | $0.001 |
| Search result (per job) | $0.003 |
| Detail result (per job, only with `includeJobDetails: true`, on top of the search result) | $0.005 |

That is about $3 per 1,000 jobs in search mode and about $8 per 1,000 jobs with detail mode (each detail row is charged both the search and the detail event). A detail event is charged only when the detail page was read successfully.

New to Apify? Every account gets a $5 free monthly platform credit, enough to test this actor properly before you pay.

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Configure the MCP server with the eFinancialCareers Scraper preconfigured at `mcp.apify.com?tools=santamaria-automations/efinancialcareers-scraper`. You can connect using clients like Tester MCP Client, or any other MCP client of your choice.

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

For per-tool schemas and copy-paste snippets for MCP clients, see the [MCP tab](https://console.apify.com/actors/9XmVOJSMvQoK6cprC/info/api/mcp?build=latest).

See the [auto-generated API tab](https://console.apify.com/actors/9XmVOJSMvQoK6cprC/info/api) for language-specific examples (cURL, JS, Python, .NET, Ruby, PHP).

Example prompt once connected:

> "Use `efinancialcareers-scraper` to find every Vice President-level M\&A role open in London this week. Return company, salary range, and posted date as a table."

### Why this actor

- Finance-native fields that generalist job scrapers lack: `sectors`, `seniority`, `bonus_eligible`, `visa_sponsorship`, `work_arrangement`, `is_external_application`.
- Keyword and city filters run on the site itself, and each keyword keeps its own results.
- Newest-first ordering, so scheduled runs pick up fresh adverts first.
- Detail mode adds the employer's own apply link, the requisition number, skills, and the recruiters listed on the employer profile.
- Both regional sites (US and UK) from the same input.
- Automatic deduplication by job ID across every query in a run.

### Common use cases

- Weekly VP and Director M\&A pipeline for a City of London executive search firm.
- Track systematic-strategies hiring at named firms by running one keyword per firm's flagship role.
- Monitor which US banks offer visa sponsorship this quarter by filtering on `visa_sponsorship: true`.
- Build a private-equity associate salary benchmark for London from every listing with a disclosed band.
- Find the talent-acquisition contacts of banks that are hiring right now via `company_recruiters`.

### Notes and limits

- The site's search API has no server-side date sort. With `sortBy: "newest"` the actor reads up to 300 top matches per keyword and orders them by posting time, so very broad keywords return the newest of the best matches rather than of every match. Split broad keywords into specific ones for deeper coverage.
- Many senior IB, PE, and hedge fund roles say "Competitive". Those come through as `salary_text: "Competitive"`, sometimes with an estimated `salary_min` and `salary_max`.
- `bonus_eligible` and `visa_sponsorship` are inferred from description text. Do not use them as legal filters.
- Employer profile fields and `company_recruiters` only exist for employers that keep a public profile. Agencies and small employers often have none.
- If a detail page is temporarily unavailable, the row is still emitted with search-level data and the detail event is not charged.
- The US site includes some UK listings. For UK coverage use `country: "gb"`.

### Related actors

- [Website Job Extractor](https://apify.com/santamaria-automations/website-job-extractor): extract jobs from any employer career page.
- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-http-scraper): the largest general job board, for finance roles outside eFinancialCareers.
- [Glassdoor Scraper](https://apify.com/santamaria-automations/glassdoor-scraper): jobs with salary estimates and company ratings.
- [Reed UK Scraper](https://apify.com/santamaria-automations/reed-uk-scraper): UK job board listings across sectors.
- [Totaljobs Scraper](https://apify.com/santamaria-automations/totaljobs-scraper): UK jobs across sectors.
- [Website Email Scraper](https://apify.com/santamaria-automations/website-email-scraper): find contact emails on the hiring companies' websites.
- [Website Contact Extractor](https://apify.com/santamaria-automations/website-contact-extractor): names, roles and department emails from company sites.

### Support

- Something broken or a field missing? Open a ticket on the actor's [Issues tab](https://console.apify.com/actors/9XmVOJSMvQoK6cprC/info/issues).
- Prefer email? Write to contact@nanoscrape.com.
- We usually reply within one working day.

# Actor input Schema

## `searchQueries` (type: `array`):

One or more finance-role keywords (e.g. 'investment banking analyst', 'quantitative analyst', 'private equity'). Each runs as a separate search and results are kept per query (see search\_query). Duplicates across queries are removed. Leave empty to list the newest finance jobs overall.

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

City or region to filter jobs by (e.g. 'London', 'New York', 'Hong Kong'). Applied to all search queries. Leave empty for the whole country site: the UK site defaults to the United Kingdom, the US site returns worldwide results.

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

Which eFinancialCareers regional site to query. 'us' = efinancialcareers.com (default), 'gb' = efinancialcareers.co.uk.

## `sortBy` (type: `string`):

'newest' (default) returns jobs ordered by posting time, newest first, from the top matches for each keyword. 'relevance' keeps eFinancialCareers' own relevance ranking.

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

Total cap across all queries. Default 25.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per search keyword. Set it below Max Total Results so every keyword gets rows. Default 100.

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

If ON, fetch each job's detail page for the HTML/markdown description, skills, reference number, external apply URL, coordinates, company profile (industry, size, about, benefits) and recruiter contacts. Charged as an extra detail event per job.

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent detail page requests (used only when Include Job Details is ON).

## Actor input object example

```json
{
  "searchQueries": [
    "investment banking analyst"
  ],
  "location": "London",
  "country": "us",
  "sortBy": "newest",
  "maxResults": 25,
  "maxResultsPerQuery": 100,
  "includeJobDetails": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset containing scraped finance job listings from eFinancialCareers.

# 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 = {
    "searchQueries": [
        "investment banking analyst"
    ],
    "country": "us",
    "sortBy": "newest",
    "maxResults": 25,
    "maxResultsPerQuery": 100,
    "includeJobDetails": false,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/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 = {
    "searchQueries": ["investment banking analyst"],
    "country": "us",
    "sortBy": "newest",
    "maxResults": 25,
    "maxResultsPerQuery": 100,
    "includeJobDetails": False,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/efinancialcareers-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 '{
  "searchQueries": [
    "investment banking analyst"
  ],
  "country": "us",
  "sortBy": "newest",
  "maxResults": 25,
  "maxResultsPerQuery": 100,
  "includeJobDetails": false,
  "maxConcurrency": 5
}' |
apify call santamaria-automations/efinancialcareers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/efinancialcareers-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/9XmVOJSMvQoK6cprC/builds/takrX6HtzLeTBzvUE/openapi.json
