eFinancialCareers Jobs Scraper - Finance & Banking Leads
Pricing
from $0.90 / 1,000 per job returneds
eFinancialCareers Jobs Scraper - Finance & Banking Leads
Scrape eFinancialCareers finance & banking jobs worldwide by keyword, city, sector, seniority, employer or date. Every row carries the full job description, employer, location and sector - plus the employer's own ATS apply link, turning a job ad into a company lead. 71,000+ live jobs.
Pricing
from $0.90 / 1,000 per job returneds
Rating
0.0
(0)
Developer
Scrapers Delight
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
💼 eFinancialCareers Jobs Scraper — Finance & Banking Job Leads
Every live job on eFinancialCareers — the specialist job board for banking, asset management, fintech, compliance and quant roles — as one clean row per job, with the full job description already on the row and, uniquely, the employer's own applicant-tracking-system link, so a job ad becomes a company lead.
71,042 live jobs worldwide the day this was measured (2026-09-04), across 31 locale domains: London, Frankfurt, Zurich, Paris, Luxembourg, Dublin, Amsterdam, Singapore, Hong Kong, Tokyo, Dubai, Sydney, Mumbai, New York.
No login. No API key. No CAPTCHA. Just the site's own public JSON, read the way the site reads it.
🎯 Who buys this data
| Buyer | What they do with a row |
|---|---|
| Finance recruitment & executive search | Every desk a bank is staffing, filtered to companies: ["Citi"] or sectors: ["COMPLIANCE_LEGAL"] + seniority: ["DIRECTOR"] — and posted_by tells you whether a rival agency already has the mandate. |
| RecTech / HR-tech sales teams | external_apply_url names the employer's ATS by domain (Workday, SmartRecruiters, iCIMS, Greenhouse…). That is a technographic signal: who runs which ATS, and who just switched. |
| B2B sales into financial services | A hiring bank is a spending bank. "Hired 12 compliance staff in Frankfurt this month" is a trigger event. |
| Market & comp researchers | Sector, seniority, position type and location on 100% of rows; salary bounds where the site carries them. |
| Job boards & aggregators | A clean, de-duplicated, filterable feed with a stable job id and a onlyNewSince delta mode. |
⚡ What you get on every row
{"id": "eVTf7UDbNsksevHA","job_id": "24741881","job_url": "https://www.efinancialcareers.co.uk/jobs-United_Kingdom-London-Associate_Director_-_Institutional_NFR_UK__Europe.id24741881","title": "Associate Director - Institutional NFR UK & Europe","company_name": "ANZ","company_brand_id": "227","company_logo_url": "https://www.efinancialcareers.com/logo/…jpeg","location_display": "London, United Kingdom","location_city": "London","location_state": "England","location_country": "United Kingdom","location_region": "Europe","location_geoname_id": "2643743","posted_date": "2026-09-03T13:45:25.000Z","expiration_date": "2026-10-03T13:00:00.000Z","salary_text": "£90k - £110k","salary_min": 90000,"salary_max": 110000,"salary_currency": "GBP","salary_is_numeric": true,"employment_type": "Full time","position_type": "Permanent","work_arrangement_type": "Hybrid","sectors": ["FINTECH/CAPITAL_MARKETS", "FX_MONEY_MARKETS/TRADING"],"full_normalized_job_title": "Director of Sales Representative","summary": "London, UK · Full-time · Hybrid remote · £90,000-£110,000 base salary…","ai_summary": "Finteum, an FCA-registered fintech startup, seeks a Sales Director to lead…","description": "…the complete plain-text job body, median 3,605 characters…","external_apply_url": "https://lseg.wd3.myworkdayjobs.com/en-US/Careers/job/London-United-Kingdom/Senior-Associate--Compliance_R0121815-1?source=eFC","is_external_application": false,"scraped_at": "2026-09-04T06:07:37.910Z"}
Turn on deep enrichment and each row also carries:
{"job_reference": "R0121815","posted_by": "direct-employer","recruiter_id": "wvaBH5xJovsTjCO7","sub_sectors": ["COMPLIANCE_LEGAL__COMPLIANCE_REGULATORY"],"allocation_date": "2026-08-22T08:58:49Z","is_anonymous": false,"canonical_url": "https://www.efinancialcareers.co.uk/jobs-UK-London-Senior_Associate_Compliance.id24700409","brand_url": "https://www.efinancialcareers.co.uk/jobs/at-London-Stock-Exchange-Group","location_lat": 51.50853,"location_long": -0.12574,"location_country_code": "GB","seo_urls": { "en_GB": "…", "de_DE": "…", "en_SG": "…", "…31 locales": "…" },"company_id": "SQ0vmP9jxBOXHXZM","company_industry": "Corporate Banking","company_year_founded": 1835,"company_hq_city": "Melbourne","company_hq_country": "Australia","company_benefits": ["flexibleWorkingHours", "workFromHome", "paidMaternityPaternityLeave"],"company_recruiters": [{ "name": "…", "title": "…" }],"company_profile_url": "https://www.efinancialcareers.co.uk/companies/ANZ-SQ0vmP9jxBOXHXZM"}
72 columns by default (flat, CSV-ready). Trim them with outputFields.
📏 Measured field fill
Real numbers from real runs, not estimates — and shown as a range across four independent slices, because fill genuinely moves with the query, the country mix and the day:
- A — 1,200 rows over London, Frankfurt, Singapore, New York, Zurich, Hong Kong (200 each), 2026-09-04
- B — 250 rows,
locations: ["London"], 2026-09-05 (run2Hb52IqdY4sSKCqPt) - C — 50 rows, empty input (whole corpus, newest-first — US-heavy that hour), 2026-09-05 (run
25zxcevGX7JOHpcbh) - D — 50 rows, prefill-only input, 2026-09-05, several hours after C (run
RiXZi8RV41Kh1dndi)
Anything below quoted as a single number was 100% on all four. Treat a one-slice percentage as an estimate, not a guarantee: every optional field below swings by tens of points between slices — C and D are the same default input a few hours apart and still differ by up to 24 points.
| Field | A (1,200) | B (250) | C (50) | D (50) |
|---|---|---|---|---|
id, job_id, job_url, title | 100% | 100% | 100% | 100% |
location_display / city / country / region | 100% | 100% | 100% | 100% |
posted_date, expiration_date | 100% | 100% | 100% | 100% |
employment_type, position_type, sectors, salary_text | 100% | 100% | 100% | 100% |
description — the full plain-text body, median 3,605 chars | 100% | 100% | 100% | 100% |
summary | 100% | 100% | 100% | 100% |
salary_currency | 99.9% | 100% | 100% | 100% |
company_name | 99.3% | 98.8% | 100% | 98.0% |
full_normalized_job_title | 97.6% | 98.4% | 96.0% | 92.0% |
ai_summary (the site's own precis) | 91.6% | 92.8% | 92.0% | 96.0% |
company_logo_url | 90.0% | 82.8% | 100% | 98.0% |
company_profile_image | — | 70.8% | 70.0% | 60.0% |
cover_image | — | 45.2% | 62.0% | 60.0% |
external_apply_url (apply enrichment, on by default) | ~75% | 82.4% | 54.0% | 72.0% |
work_arrangement_type (Remote / Hybrid / In-office) | 23.5% | 22.8% | 44.0% | 22.0% — the site often omits it |
salary_min / salary_max | 17.3% | 16.4% | 38.0% | 44.0% — read the salary note below |
job_reference (deep enrichment) | ~83–88% | — | — | — |
recruiter_id → posted_by (deep enrichment) | ~33–50% agency-placed | — | — | — |
| company-profile fields (deep enrichment) | ~38–50% — many employers publish no profile | — | — | — |
A default run emits all 72 columns, of which 46 are ever non-empty and 42.8–43.2 are
non-empty per row (slices D, C and B). The 26 that come back empty by default are the
deep-enrichment columns — switch fetchJobDetail / fetchCompanyProfile on and they fill; none
is a dead field.
Three column pairs agree on almost every row, and that is deliberate — they are separate source
fields, not copies. is_external_application comes from the search feed and
is_external_job_application from the apply-information call, so with fetchApplyUrl: false the
first is filled on 100% of rows and the second is null on all of them (measured 0/30 agreement,
run dfUuIWBUhn3sz94bf); location_geoname_id (the ad's location id) and city_geoname_id
differed on 2 of 250 rows in slice B; company_name (which falls back through the feed's
companyName → fullCompanyName → brand name) matched company_brand_name on every row measured
so far. Drop whichever you do not need with outputFields.
The same run returned exactly 200 rows per city and every row's country matched the city asked for — London → United Kingdom, Frankfurt → Germany, Singapore → Singapore, New York → United States, Zurich → Switzerland, Hong Kong → Hong Kong. 256 distinct employers in 1,200 rows.
💷 The salary note — read this before you buy
Salary on eFinancialCareers is not a reliable field, and this actor will not pretend otherwise.
- The displayed salary text is the literal word "Competitive" on 82.2% of the 1,200-row six-city sample, and 80.2% of rows carry no salary number anywhere at all.
- Numeric
salary_min/salary_maxfill swings hard by geography, because pay-transparency law does. Measured: 17.3% across the six-city spread, 16.4% on a 250-row London slice, 38.0% on a 50-row US-heavy slice, 45.6% on a 1,000-row United-States-heavy slice, 9.1% on an 1,800-row Europe/Asia recon sample. Expect single digits to high teens in Europe and roughly half in the US — and treat any single figure as slice-dependent. - The site sometimes carries numeric bounds even where the ad text says "Competitive" — those are the site's own figures, not a quoted salary. Treat them as an estimate.
Two filters exist for this, and rows they remove are never billed:
onlyWithNumericSalary (strict — keeps rows with real numbers) and includeUnspecifiedSalary: false
(looser — also keeps day rates like £500 - 550p/d).
This is why the title of this actor does not say "salary". Some rivals sell it that way. It is a refund waiting to happen.
🔍 Filters — every one tested against the live site
Values inside one filter are OR-ed; different filters are AND-ed. Live counts measured 2026-09-03.
| Filter | Live counts you can rely on |
|---|---|
locations + radius | London 7,629 · Frankfurt 1,708 · Singapore 2,320 · New York 4,346 · Zurich 764 · Sydney 753 · Tokyo 436 · Mumbai 503 · Dubai 395. Frankfurt @ 40 km really does pull in Darmstadt and Bad Nauheim. |
locationPaths | Europe 40,088 · North America 17,982 · Asia 10,696 · Australasia 1,380 · Gulf 877 |
sectors | INFORMATION_TECHNOLOGY 34,625 · ACCOUNTING_FINANCE 14,783 · INSURANCE 3,640 · COMPLIANCE_LEGAL 3,055 · OPERATIONS 2,731 · ASSET_MANAGEMENT 2,708 · PRIVATE_BANKING_WEALTH_MANAGEMENT 2,281 |
seniority | ASSOCIATE_MID_LEVEL 38,021 · AVP_SENIOR 14,332 · INTERN_GRADUATE 3,709 · VP_PRINCIPAL 3,614 · ANALYST 2,738 · SVP_HEAD_OF 2,144 · DIRECTOR 2,128 · JUNIOR 1,077 |
positionType | PERMANENT 67,331 · CONTRACT 1,558 · INTERNSHIPS_AND_GRADUATE_TRAINEE 1,074 · TEMPORARY 992 · SELF_EMPLOYED 86 |
employmentType | FULL_TIME 70,127 · PART_TIME 914 |
workArrangementType | HYBRID 1,796 · IN_OFFICE 834 · REMOTE 220 · FLEXIBLE 96 |
companies | e.g. Deloitte 998 |
normalizedJobTitles | Accountant 1,135 · Engineer 1,035 · Consultant 898 · Lawyer 793 · Account Manager 718 |
postedWithin | ONE 4,172 · THREE 11,051 · SEVEN 19,033 |
salaryCurrency + minSalary / maxSalary | GBP + min 100,000 → 310 jobs, every returned row ≥ £100k. Verified row by row. |
Combining works exactly as you would expect: seniority: DIRECTOR (2,128) AND
sectors: COMPLIANCE_LEGAL (3,055) returns 67.
The live vocabulary is written to your run's key-value store as FILTER_VOCABULARY — the exact
sector, seniority, currency and title values the site offered for your search, read from the
response itself rather than hardcoded here. Use it to build the next run.
🧠 Things this actor gets right that a naive scraper does not
- An out-of-range page is "done", never an error. Ask for page 2 of a 6-result search and a naive crawler records a failure. This one clamps every page against the site's own result count and ends that search cleanly. (A recon harness scored 58.3% on this site purely from this bug.)
- The ~60,000-row depth ceiling is guarded. Bisected live: row offset 59,950 returns rows, 62,450 returns HTTP 500. The actor stops at the guard and tells you to narrow the search. It never surfaces the site's 500 as a failed run. Slice by city or sector to go past it.
- De-duplication happens BEFORE billing. Measured overlap: 0.13% within one contiguous band, 1.00% across contiguous pages, 1.5% across overlapping keyword searches. You never pay twice.
- Retries are not optional and they are built in. 53 sustained calls through the Apify datacenter proxy: 90.6% clean first try, 100% within 3 tries. Every miss was a transient CDN fault (connection reset, truncated body, cold-cache timeout). Zero 403s, zero CAPTCHAs.
- A big page that times out shrinks instead of failing. A 1,000-row request the CDN is slow to build is retried at the same offset with half the page size.
- A pasted URL is translated, not followed. The site's own
/jobs-UK.London.s001URLs 301 to/jobsand silently drop the location filter. This actor reads the filters out of the URL, so your London search stays a London search. - A run that finds nothing exits clean and charges nothing, and the status message tells you which of the three reasons it was.
🚀 Quick starts
Everything posted in the last 3 days, newest first
{ "postedWithin": "THREE", "sortBy": "date", "maxItems": 2000 }
Every compliance director in the City, with the employer's ATS link
{ "locations": ["London"], "sectors": ["COMPLIANCE_LEGAL"],"seniority": ["DIRECTOR", "SVP_HEAD_OF"], "fetchApplyUrl": true, "maxItems": 500 }
Everything one bank is hiring for, globally, fully enriched
{ "companies": ["Deloitte"], "fetchJobDetail": true, "fetchCompanyProfile": true, "maxItems": 1000 }
A weekly new-jobs feed for your CRM (schedule it, and move the timestamp each run)
{ "locations": ["Frankfurt", "Zurich", "Luxembourg"],"onlyNewSince": "2026-09-01T00:00:00Z", "maxItems": 0 }
A wide sweep, four columns, cheapest possible
{ "pageSize": 1000, "maxItems": 0, "fetchApplyUrl": false, "descriptionMode": "none","outputFields": ["title", "company_name", "location_city", "job_url"] }
💰 Pricing
Pay per event. No run-start fee. You pay for rows you actually receive.
| Event | Price | When it fires |
|---|---|---|
| Per job returned | $0.0009 ($0.90 per 1,000) | Once per unique job delivered to your dataset — including the employer's ATS apply link. Duplicates and filtered-out rows are free. |
| Per deep enrichment | $0.0009 | Only for rows that deep enrichment actually returned data for, and only when you switch fetchJobDetail or fetchCompanyProfile on. |
At $0.0009 a row this is below the cheapest price in this category and below the current category leader's $0.001 — and unlike several rivals there is no per-run start fee bolted on top.
Cost examples: 1,000 jobs $0.90 · 10,000 jobs $9.00 · the entire 71,042-job live corpus
$63.94. Set maxCostUsd and the run stops before it crosses your number, not after — on
every delivery path: search pages, the newest-first (sortBy: "date") buffer and pasted job
URLs all go through the same pre-charge gate. Re-proven live on the current build 0.1.5:
maxCostUsd 0.001 with 8 pasted job URLs billed 1 row (run 5G3ZSZwNFVoTpsMB2), the same cap
on sortBy: "date" billed 1 row (run sV0WLGfdkd5USc0Oo), and maxCostUsd 0.005 with deep
enrichment on ($0.0018 a row) billed 2 rows = $0.0036 (run 8Se1nt5NvcGY4u7lA).
❓ FAQ
Do I need an eFinancialCareers account, cookie or API key? No. Every request is the site's own public JSON endpoint with ordinary browser headers.
Which countries does it cover?
All of them. eFinancialCareers is one global index served on 31 locale domains — the same job
appears on .co.uk, .de, .ch, .fr, .sg, .hk, .com.au, -gulf.com and the rest. Pick
which domain the job_url column should point at with localeDomain; filter geography with
locations or locationPaths, not by domain.
Can I get all 71,000 jobs in one run? Almost. The site stops serving results past a row offset of about 60,000 per search, so a true full-corpus pull needs 2–3 slices (by region path or by sector). The actor tells you when it hits that boundary and what to narrow.
How fresh is the data?
posted_date is filled on 100% of rows and the site's index with an empty keyword is strictly
newest-first. postedWithin gives you the site's own 24-hour / 3-day / 7-day windows;
postedAfter / postedBefore let you set any window you like, and onlyNewSince gives you a pure
delta feed for scheduling.
What exactly is external_apply_url?
The URL eFinancialCareers itself sends an applicant to. About three quarters of jobs have one, and
most point straight at the employer's own ATS or careers domain — lseg.wd3.myworkdayjobs.com,
jobs.smartrecruiters.com/Wise, jobs-fishercareers.icims.com, portal.emagine.org. A minority
are served through the site's ad-network click tracker (click.appcast.io) instead. This actor
does not follow those redirects — following an advertising click-tracker would register a paid
click against the employer's budget, which is not something a scraper should do on your behalf.
Agency-posted or direct from the employer?
Turn on fetchJobDetail. posted_by reads agency when the ad was placed through a recruiter
seat and direct-employer when it was not — which is exactly the question an executive-search
buyer asks first.
Is the full job description really included at no extra cost?
Yes. The site's listing response carries the complete plain-text body (median 3,605 characters),
so there is no per-row detail fetch to pay for. descriptionMode: "html" fetches the HTML version,
and that costs a deep-enrichment charge.
Will it double-charge me for a job two searches both found?
No. Rows are de-duplicated on the site's stable job hash before anything is pushed or billed. Set
deduplicateAcrossQueries: false if you deliberately want one copy per search.
What happens if my filters match nothing? The run succeeds, returns zero rows, charges nothing, and the status message names the reason — nothing matched, everything was filtered out, or your start page was past the end.
Do I need residential proxies? No, and you should not use them. Measured on one identical URL: direct 766 ms, Apify datacenter 1,125 ms, residential GB 2,403 ms, residential US 4,749 ms — all returning identical rows. Datacenter is the default and it is the right answer.
How fast is it?
1,000 rows in a single request in 23 seconds (pageSize: 1000). A 50-row run with apply-link
enrichment on finishes in about 20–40 seconds end to end.
Can I paste URLs from the site instead of building a filter?
Yes — startUrls accepts listing URLs and individual job URLs from any of the 31 locale domains,
and translates them into the right query. Job URLs are resolved directly to a single row.
What does a pasted job URL cost?
One Per job returned charge, the same as any other row. Resolving a pasted job URL has to go
through the job-detail endpoint — that call is the only way to turn a URL into a row — so the
deep-detail fields ride along free on that path. The Per deep enrichment charge still fires
only when you switch fetchJobDetail / fetchCompanyProfile on yourself (2 URLs with enrichment
off → job-scraped: 2, job-detail-enriched: 0, run uuItiluIXcQibg03b; the same 2 URLs with
fetchJobDetail: true → 2 and 2, run eNkifuKByejRMbuoP). maxItems and maxCostUsd are
applied to the URL list before any request goes out, so a cap can never be overshot by pasting a
long list.
⚖️ Legality, fair use and personal data
- This actor reads only public JSON endpoints that eFinancialCareers' own web pages call, with ordinary browser headers. No login is used, no authentication is forged, no request signature is computed, and no CAPTCHA or anti-abuse control is touched or bypassed.
www.efinancialcareers.co.uk/robots.txtreads, verbatim:User-agent: * Disallow: /secure Disallow: /myefc Disallow: /login Disallow: /rememberMobilePreference Disallow: /remote Disallow: /profile Disallow: /v1 Disallow: /v3 Disallow: /search … crawl-delay: 10. Those directives govern thewwworigin. This actor never fetches that host. The API host it does use,job-search-ui.efinancialcareers.com, returns 404 forrobots.txt— no directives at all. AcrawlDelaySecsknob is provided anyway if you want to throttle.- It does not follow advertising click-trackers, so it never spends an employer's ad budget.
- Personal data: with
fetchCompanyProfileon, a row can include the names of recruiters an employer has published on its own eFinancialCareers company profile. Complying with GDPR / UK GDPR and any other applicable law when you store, enrich or contact people is your responsibility, not this actor's. Leave the toggle off if you do not need it. - You are responsible for complying with eFinancialCareers' Terms of Service and for how you use what you collect.
Not affiliated with or endorsed by eFinancialCareers or DHI Group.