eFinancialCareers [$1💰] Finance & Banking Jobs Scraper avatar

eFinancialCareers [$1💰] Finance & Banking Jobs Scraper

Pricing

from $0.80 / 1,000 result (one job)s

Go to Apify Store
eFinancialCareers [$1💰] Finance & Banking Jobs Scraper

eFinancialCareers [$1💰] Finance & Banking Jobs Scraper

Scrape 70,000+ finance and banking jobs from eFinancialCareers. Filter by sector, seniority, employer, salary and region, or paste any search URL. Each row has the employer's real ATS apply link, skills, and company data: industry, year founded, benefits and recruiters. No proxy cost.

Pricing

from $0.80 / 1,000 result (one job)s

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

29

Total users

4

Monthly active users

19 hours ago

Last modified

Categories

Share

eFinancialCareers Jobs Scraper

Turn eFinancialCareers into structured finance-hiring data — across all 24 regional sites. Scrape every job from any eFinancialCareers search or listing URL — title, employer (with logo and profile), location, salary, sectors, contract type, posted/expiry dates, full HTML description, and the real external apply URL (the employer's own Workday / iCIMS / Greenhouse link, not the listing page) — pulled straight from eFinancialCareers' JSON APIs. JSON or CSV out, billed per result.

How it works

How eFinancialCareers Jobs Scraper works

✨ Why use this scraper?

  • Real ATS apply URLs — each job resolves the employer's actual application link (myworkdayjobs.com, icims.com, taleo.net, …) into externalApplyUrl, not just the eFinancialCareers page.
  • Pure JSON, no HTML scraping — data comes from the site's own APIs, so fields don't break when the page layout changes.
  • No proxy needed — the APIs are openly accessible; you pay nothing extra for residential proxy traffic.
  • All 24 regional sites — .com, .co.uk, .de, .fr, .sg, .com.au, .co.za, efinancialcareers-canada.com, -gulf.com, and more, auto-detected from the URL.
  • Full HTML job description plus a clean plain-text version, on every row.
  • Every site filter as a dropdown: sector (36), seniority, experience level, position type, employment type, work arrangement, region, employer name and salary range with currency. The site applies them itself, so filtered-out jobs cost nothing.
  • Only new jobs on scheduled runs: switch on onlyNewJobs and each run skips the jobs earlier runs of the same search already delivered. Skipped jobs are never billed, so a daily schedule pays only for fresh postings.
  • Output shaped to fit: compact core-fields mode, description as HTML, text, both or none, long text cut at a length you choose, and empty fields dropped. Smaller rows for AI agents, MCP tools and spreadsheets.
  • Spend cap: maxCostUsd stops the run once the jobs delivered reach your budget, and Apify's own "Max cost per run" is honoured too, so a run never collects jobs it can't bill.
  • Many searches in one run: one keyword or location per line, every keyword runs in every location, results de-duplicated, with an optional cap per search.
  • Company intelligence built in: each unique employer's public profile is fetched once and merged into every one of its jobs: description, industry, year founded, profile location, benefits, and the named recruiters with their work emails. When the profile has no website, the company domain comes from those recruiter emails.
  • Skills, coordinates and repost detection on every row: the ad's skills list, latitude/longitude, sub-sectors, and firstPostedDate / isRefreshedAd to spot ads that were re-dated rather than newly posted.

🎯 Use cases

WhoWhat they do with it
Recruitment agenciesTrack which banks, funds, and fintechs are hiring, in which cities, for which desks
HR / comp & ben teamsBenchmark salaries and contract types across finance hubs (London, NY, Singapore, Dubai)
Job aggregatorsIngest structured finance vacancies with dedupe-ready numeric IDs and real apply links
Market researchersMeasure hiring volume by sector (M&A, risk, compliance, quant) over time
Sales / lead-gen teamsFind employers actively hiring — each row carries the employer profile and optional contact-email enrichment
Data scientistsTrain models on 70,000+ live structured job records with sector and seniority labels

📥 Supported inputs

InputExampleWhat happens
Global or regional listinghttps://www.efinancialcareers.com/jobs · https://www.efinancialcareers.co.uk/jobsWalks the full search feed for that locale
Search with keyword/location/jobs?q=trader&location=LondonFilters pass straight to the search API
Country page/jobs/in-united-kingdom · /jobs/in-singaporeMapped to a location filter
Remote/hybrid pages/jobs/remote · /jobs/hybridMapped to work-arrangement filters
Direct job URL/jobs-United_Kingdom-London-Analyst.id24313799Scraped as a single job
Keyword + location fieldskeyword: "quant analyst\ntrader", location: "Singapore\nLondon"One search per keyword × location; used when Start URLs is empty
Filterssectors: ["RISK_MANAGEMENT"], seniority: ["DIRECTOR"], companies: ["Citi"]Applied to keyword searches and added to listing Start URLs

Not supported: company-profile listing pages (/companies/{slug}) as start URLs (company data is merged into job rows instead), news/editorial pages, and login-only candidate features.

🔄 How it works

  1. Classify each start URL — search/listing vs direct job (any regional domain).
  2. Stream the search API — up to 100 jobs per request; details start processing while later pages are still being fetched.
  3. Fetch the detail API per job: formatted HTML description, skills, coordinates, sub-sectors, job reference, work-arrangement type, first-placed date.
  4. Fetch the apply-information API per job — resolves the real external ATS apply URL and login-required flag.
  5. Fetch each unique company profile once (cached): description, industry, year founded, profile location, benefits, recruiters, website when published.
  6. Push one merged row per job to the dataset — capped exactly at maxItems.

⚙️ Input parameters

FieldTypeDefaultDescription
startUrlsarray—Listing/search and/or direct job URLs, any regional domain
keywordstring—One keyword per line, one search each; used when startUrls is empty
locationstring—One free-text location per line; every keyword runs in every location
remoteOnlybooleanfalseOnly remote jobs
includeRemotebooleanfalseInclude remote jobs in location-filtered searches
regionsarray—Europe, North America, Asia, Australasia, Gulf, Africa
sectorsarray—Any of the site's 36 sectors, e.g. RISK_MANAGEMENT, TRADING, HEDGE_FUNDS
seniorityarray—INTERN_GRADUATE … C_SUITE
experienceLevelarray—Years of experience the ad asks for
positionTypearray—PERMANENT, CONTRACT, TEMPORARY, SELF_EMPLOYED, INTERNSHIPS_AND_GRADUATE_TRAINEE
employmentTypearray—FULL_TIME, PART_TIME
workArrangementarray—HYBRID, IN_OFFICE, REMOTE, FLEXIBLE, TEMPORARILY_REMOTE
companiesarray—Employer names, e.g. Deloitte, Citi
salaryCurrencystring—Currency the salary is stated in (GBP, USD, EUR, …)
minSalary / maxSalaryinteger—Salary bounds in that currency
includeJobsWithoutSalarybooleanautoDefaults to on, or off once a salary bound is set
enrichJobDetailsbooleantrueFetch HTML description + job reference + work arrangement (+1 API call/job)
fetchApplyInfobooleantrueResolve the real external ATS apply URL (+1 API call/job)
enrichCompanybooleantrueFetch each unique company profile once (cached)
enrichEmailsbooleanfalseExperimental employer contact-email discovery
postedWithinHoursinteger—Only jobs posted in the last N hours (24 = last day)
onlyNewJobsbooleanfalseSkip jobs earlier runs of the same search delivered (kept 90 days)
stateKeystringautoOptional name for that memory; share it between tasks or change it to start fresh
maxItemsinteger1000Hard cap on jobs collected and billed
maxItemsPerSearchinteger0Cap per keyword × location search or start URL (0 = none)
maxCostUsdnumber0Stop once the jobs delivered reach this amount (0 = no limit)
descriptionFormatstringbothboth, text, html or none
descriptionMaxLengthinteger0Cut description, summary and company description at N characters
compactbooleanfalseKeep only the core columns
excludeEmptyFieldsbooleanfalseDrop null and empty fields from each row
maxConcurrencyinteger10Parallel job API calls
proxyobjectnoneNot needed — honoured as an explicit override only

📊 Output overview

Each dataset row is one job with everything merged inline: identity (numeric + hash ID, canonical URL), employer (name, logo, profile description), location fields, salary (structured when the employer publishes numbers, raw text otherwise), sectors, contract/employment type, dates, both description formats, and the full apply flow (applyType, externalApplyUrl, applyLoginRequired). Fields the source doesn't provide are null — columns never disappear between rows.

📦 Output sample

{
"type": "job",
"source": "efinancialcareers",
"jobId": "24313799",
"jobHashId": "LuhoFP4fukX8W5UM",
"jobUrl": "https://www.efinancialcareers.co.uk/jobs-United_Kingdom-London-Analyst.id24313799",
"title": "Analyst",
"companyName": "Apollo Global Management, Inc.",
"companyWebsite": null,
"companyDomain": null,
"location": "London, United Kingdom",
"addressLocality": "London",
"country": "United Kingdom",
"remote": false,
"salary": null,
"salaryRaw": "Competitive",
"categories": ["Accounting & Finance / Other"],
"employmentTypes": ["Full time"],
"contractType": "Permanent",
"postedDate": "2026-05-29T07:09:15.257Z",
"closingDate": "2050-01-01T23:45:00.000Z",
"description": "<b>Position Overview</b> <br /> <br /> The Apollo Capital Solutions Syndication team is seeking a detail-oriented Analyst…",
"descriptionText": "Position Overview\n\nThe Apollo Capital Solutions Syndication team is seeking a detail-oriented Analyst…",
"applyType": "external",
"applyUrl": "https://www.efinancialcareers.co.uk/jobs-United_Kingdom-London-Analyst.id24313799",
"externalApplyUrl": "https://athene.wd5.myworkdayjobs.com/apollononpubliccareersite/job/Analyst---Sub-IG-EU_R260189",
"applyLoginRequired": true,
"jobReference": "R260189",
"companyProfileId": "IHbtb9VgLfctBz5q",
"scrapedAt": "2026-07-12T03:41:12.480Z"
}

🗂 Key output fields

GroupFields
IdentityjobId (numeric), jobHashId, jobUrl, title, normalizedTitle, jobReference
EmployercompanyName, logoUrl, companyProfileId, companyDescription, companyIndustry, companyYearFounded, companyProfileCity, companyProfileCountry, companyBenefits, companyRecruiters (name, title, email, profileUrl), companyWebsite, companyDomain, companyDomainSource, companyProfileImage, companyCoverImage, employerJobsUrl
Locationlocation, addressLocality, addressRegion, country, countryCode, worldRegion, latitude, longitude
Compensationsalary.{currency,min,max,raw} (structured when published), salaryRaw
Classificationcategories (sectors, humanised), sectorTags (raw), subSectors, skills, contractType, employmentTypes, workArrangementType, permitRequirements
DatespostedDate, firstPostedDate, isRefreshedAd, closingDate (ISO-8601)
Contentdescription (HTML), descriptionText (plain), summary
Apply flowapplyType (external/internal), applyUrl, externalApplyUrl (real ATS link), applyLoginRequired
FlagsisHighlighted, isAnonymousEmployer, recruiterId, language, canonicalUrl

❓ FAQ

Do I need a proxy? No. The scraper reads eFinancialCareers' open JSON APIs, which work from any IP. A proxy config is honoured as an override if you ever see regional blocks, and a residential fallback is built into the retry chain.

Is externalApplyUrl always filled? It's filled for externally-applied jobs (most of them) — the employer's own ATS link. Jobs using eFinancialCareers' internal apply flow get applyType: "internal" and externalApplyUrl: null; there is no external link to resolve for those.

Why is salary often null while salaryRaw says "Competitive"? Most finance employers don't publish numbers. When they do, salary.min/salary.max/salary.currency are structured; otherwise salaryRaw carries the text label.

Can I scrape non-English regional sites? Yes — pass any regional URL (efinancialcareers.de, .fr, .cn, …). The locale (language + currency context) is auto-detected from the domain and path.

How fresh are postedDate values? They come from the API and are ISO-formatted. Employers can re-date an existing ad, so postedDate can be the latest refresh. firstPostedDate is when the ad was first placed, and isRefreshedAd is true when the two are more than a day apart. Use postedWithinHours for monitoring runs.

How does "Only new jobs" work? Each run stores the IDs of the jobs it delivered in a key-value store named efinancialcareers-seen-jobs in your own Apify account, one record per search. The next run of the same search skips those IDs before fetching anything, so they cost nothing. IDs are forgotten after 90 days. An ad the employer re-dates keeps its ID, so it is not delivered again. Pair it with postedWithinHours to keep scheduled runs fast.

Why does a salary filter return fewer jobs than I expected? Most finance ads don't state a salary, and once you set a minimum or maximum those ads are left out (otherwise every one of them would pass the bound). Set includeJobsWithoutSalary: true to keep them.

💬 Support

🛠 Additional services

  • Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
  • Need a similar scraper for other job boards (SimplyHired, TotalJobs, CharityJob, s1jobs, etc.)? Drop an email.
  • For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com

🔎 Explore more scrapers

If this eFinancialCareers Scraper was useful, see other scrapers and actors at memo23's Apify profile — covering job boards, real estate, social media, and more.


🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/efinancialcareers-jobs-scraper).

Purpose: Scrape finance jobs from any eFinancialCareers search, listing or direct job URL across all 24 regional sites, resolving each employer's real external ATS apply link.

Minimal input:

{ "startUrls": ["https://www.efinancialcareers.com/jobs"], "maxItems": 20 }

Or drive it with search fields and filters instead of a URL: { "keyword": "quant analyst", "location": "Singapore", "sectors": ["QUANTITATIVE_ANALYTICS"], "seniority": ["VP_PRINCIPAL"], "maxItems": 20 }.

Output: one row per job — type, source, jobId, jobHashId, jobUrl, title, companyName, companyWebsite, companyDomain, location, addressLocality, country, remote, salary, salaryRaw, categories, employmentTypes, contractType, postedDate, closingDate, description, descriptionText, applyType, applyUrl, externalApplyUrl, applyLoginRequired, jobReference, skills, subSectors, latitude, longitude, firstPostedDate, isRefreshedAd, companyProfileId, companyIndustry, companyYearFounded, companyProfileCountry, companyBenefits, companyRecruiters, scrapedAt.

Behaviors an agent should know:

  • startUrls (listing/search or direct job, any regional domain) take priority; keyword/location are used only when startUrls is empty. Filter fields (sectors, seniority, companies, minSalary, …) apply to both, unless a start URL already sets that filter.
  • keyword and location take one value per line; every keyword runs in every location. Use maxItemsPerSearch so the first search can't use up maxItems.
  • Always set maxItems — eFinancialCareers lists ~70,000+ jobs globally; default cap is 1000.
  • enrichJobDetails, fetchApplyInfo, enrichCompany default true and each add one API call per job (fetchApplyInfo resolves externalApplyUrl); enrichEmails is experimental and off by default.
  • postedWithinHours filters to recent postings for monitoring runs; no proxy needed (open JSON APIs).
  • For schedules, set onlyNewJobs: true: jobs delivered by earlier runs of the same search are skipped and not billed.
  • For small payloads, set compact: true (core columns only), descriptionFormat: "text" and descriptionMaxLength (e.g. 1000). maxCostUsd caps spend per run.
  • Billed per result (pay-per-event) — see the Pricing tab on the actor page.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by eFinancialCareers, the DHI Group, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available job listings and the public JSON endpoints that power the eFinancialCareers website — no authenticated endpoints, recruiter-only features, candidate data, or content behind a login. Users are responsible for ensuring their use complies with eFinancialCareers' Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.


SEO Keywords

efinancialcareers scraper, scrape efinancialcareers, efinancialcareers api, efinancialcareers jobs scraper, Apify efinancialcareers, finance jobs scraper, banking jobs api, investment banking jobs data, fintech jobs scraper, quant jobs scraper, hedge fund jobs data, finance recruitment data, finance salary benchmark, london finance jobs scraper, wall street jobs scraper, singapore finance jobs api, financial services hiring trends, ats apply url scraper, workday apply link scraper, finance job board scraper, dice alternative scraper, linkedin jobs alternative scraper