APEC Jobs Scraper
Pricing
from $5.00 / 1,000 job scrapeds
APEC Jobs Scraper
Scrape APEC.fr French executive (cadre) job postings by keyword, département/city or pasted APEC search URL: title, company, salary range, location, contract type, remote work and apply URL. No login needed.
Pricing
from $5.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
What is APEC Jobs Scraper?
APEC Jobs Scraper is an Apify Actor for APEC.fr French executive (cadre) job searches. It accepts free-text keywords, a département or city filter, pasted APEC search URLs, and structured filters for recency, salary band, contract type, remote-work policy, and experience level. Each returned record represents one APEC offer and can include the offer ID, public offer number, title, company, confidentiality flag, location, geo coordinates, salary text and parsed salary range, contract type, remote-work policy, description excerpt, published and validated timestamps, low-application flag, sector codes, and the public apply URL. Results are stored in an Apify dataset, so each output record is one job offer that you can read in Apify Console, through the Apify API, or via Apify MCP.
Best fit and connected workflows
Use this Actor when your workflow starts with APEC.fr executive roles and you need structured offer data for search, monitoring, enrichment, or agent-assisted triage.
Good fits include:
- French job search monitoring by keyword, salary, location, contract type, or publication date.
- Executive recruiting workflows that review the public offer URL together with a concise excerpt.
- Market research on French executive hiring by remote-work policy, sector, or publication date.
- AI and automation workflows that read current APEC offers through Apify MCP.
Practical scenario
Claire is a recruiter building a shortlist for French executive data roles. She starts with data scientist, sets sortBy to date_desc, filters to CDI, and limits the search to offers posted within 7 days. The returned records include the title, company, location, salary text, parsed salary bounds, remote-work policy, and public URL. Claire uses salaryMin, remoteWork, and publishedAt to decide which offers match her briefing, then opens the url field to review the public posting in a browser.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
searchQuery | string | data scientist | French keyword(s) searched on APEC.fr. Searches title and description. Leave empty to browse all active offers. |
locations | array | - | French département numbers (75, 69, 13…) or major city names (Paris, Lyon, Bordeaux…), mapped to their département. Leave empty for all of France. |
startUrls | array | - | APEC search result URLs. The filters in each URL are used as-is; maxResults and sortBy still apply. |
maxResults | integer | 50 | Maximum number of job offers to return. APEC caps a single search at about 1000 results. |
sortBy | string | date_desc | relevance, date_desc, or date_asc. |
postedWithinDays | integer | - | Return only offers published within the last N days. |
salaryMin | integer | - | Minimum annual gross salary in EUR. |
salaryMax | integer | - | Maximum annual gross salary in EUR. |
contractTypes | array | - | CDI, CDD, FREELANCE, STAGE, or ALTERNANCE. |
remoteWork | array | - | FULL_REMOTE, HYBRID, OCCASIONAL, or NONE. |
experienceLevel | array | - | JUNIOR, MID, SENIOR, or EXEC. |
proxy | object | {"useApifyProxy":true} | Apify Proxy configuration. Default uses Apify Unblocker with its automatically selected location and a bounded 90-second request timeout; a browser on a French residential IP is the fallback. Explicit proxy settings are preserved. |
Location example: CDI data jobs in Paris and Lyon, last 7 days
{"searchQuery": "data","locations": ["Paris", "69"],"contractTypes": ["CDI"],"postedWithinDays": 7,"maxResults": 50}
Paste an APEC search URL
{"startUrls": ["https://www.apec.fr/candidat/recherche-emploi.html/emploi?motsCles=comptable&lieux=75&typesContrat=101888"],"maxResults": 30}
Focused input example
{"searchQuery": "développeur python","maxResults": 25,"sortBy": "date_desc","postedWithinDays": 7,"salaryMin": 50000,"contractTypes": ["CDI"],"remoteWork": ["FULL_REMOTE", "HYBRID"],"experienceLevel": ["MID", "SENIOR"]}
Output
Results are stored in the default dataset, with one JSON record per APEC offer. The overview view highlights the fields most useful for screening: title, company, location, salary text, contract type, remote-work policy, publication date, and public URL. The output schema also exposes a run summary in key-value storage, which includes stats and a sample of the first three records.
| Field | Type | Description |
|---|---|---|
jobId | string | APEC numeric offer ID. |
offerNumber | string | APEC public offer number used in the public URL. |
title | string | Posted job title in French. |
company | string | null | Commercial name of the hiring company. |
isConfidential | boolean | True when APEC hides the hiring company name. |
location | string | null | Free-text French location such as Paris 13 - 75. |
department | string | null | Département code parsed from location, such as 75. |
latitude | number | null | Latitude when APEC provides coordinates. |
longitude | number | null | Longitude when APEC provides coordinates. |
salaryText | string | null | Salary range as written by the employer in French. |
salaryMin | number | null | Parsed minimum annual gross salary in EUR. |
salaryMax | number | null | Parsed maximum annual gross salary in EUR. |
contractType | string | null | Mapped APEC contract code. |
contractDurationMonths | number | null | Duration in months for fixed-term contracts. |
remoteWork | string | null | Mapped APEC remote-work code. |
descriptionExcerpt | string | null | First roughly 300 characters of the listing description. |
publishedAt | string | null | Publication timestamp in ISO 8601 format. |
validatedAt | string | null | Validation timestamp in ISO 8601 format. |
lowApplicationCount | boolean | null | APEC flag for offers with few applications so far. |
sectorCode | number | null | APEC internal sector ID. |
sectorParentCode | number | null | Parent sector ID. |
url | string | Public APEC URL for the offer. |
Output example
{"jobId": "178908136","offerNumber": "178908136W","title": "Data Scientist","company": "Exemple Conseil","isConfidential": false,"location": "Paris 13 - 75","department": "75","latitude": 48.8306,"longitude": 2.3551,"salaryText": "45 - 49 kEUR brut annuel","salaryMin": 45000,"salaryMax": 49000,"contractType": "CDI","contractDurationMonths": 0,"remoteWork": "HYBRID","descriptionExcerpt": "Entreprise en forte croissance recherche un data scientist pour renforcer ses analyses et contribuer a la priorisation des sujets produit.","publishedAt": "2026-06-27T08:15:00.000Z","validatedAt": "2026-06-27T09:02:00.000Z","lowApplicationCount": true,"sectorCode": 12,"sectorParentCode": 1,"url": "https://www.apec.fr/candidat/recherche-emploi.html/emploi/detail-offre/178908136W"}
How it works
This Actor uses APEC's public search webservice. It builds a search payload from your form filters (or from each pasted APEC search URL), pages through the results, and normalizes each offer into a dataset record.
- Requests go through Apify Unblocker over HTTP, with a bounded browser session on a French residential IP when APEC shows an anti-bot check.
- Location filtering is applied by APEC itself, so only offers in the requested départements are paged and charged.
- APEC search results carry listing-level fields such as salary text, geo data, contract code, telework code and dates.
- The search response includes an excerpt of the job description; the full offer text stays on the public offer page.
- Each run writes an explicit outcome to
OUTPUTandRUN_SUMMARY:COMPLETE,PARTIAL,VALID_EMPTY(no matching offers) orINVALID_INPUT(for example an unknown location or a non-APEC URL), and an unsuccessful run status when APEC could not be reached.
Pricing
This Actor uses Pay per event with Apify platform usage included. Charged events are:
- Actor start
- Job scraped
Job scraped is charged for each APEC offer returned in the dataset. For example, a run that returns fifty offers charges fifty Job scraped events plus one Actor start event. Open the live Pricing tab in Apify Console to review the current event pricing and Apify platform usage details.
Use with AI agents (MCP)
This Actor is usable through Apify MCP for agent workflows that need structured APEC job data.
Precise tool description: query APEC.fr executive offers with keyword and filter inputs, then read the resulting dataset records for title, company, salary, location, contract type, remote-work policy, publication date, and public URL.
Exact Actor identity: khadinakbar/apec-jobs-scraper
Find current APEC executive jobs for a French data team. Search for "data scientist", return the newest 20 offers, keep only CDI roles, and summarize the titles, companies, salary ranges, and public URLs.
Output interpretation:
jobIdandofferNumberidentify each APEC offer.salaryTexttogether withsalaryMinandsalaryMaxsupports compensation review.remoteWorkandcontractTypegroup offers by policy.urlpoints to the public APEC offer page.descriptionExcerptprovides a short triage summary from the search results.- Results come from APEC listing data, so the dataset represents offer-level search output rather than a full detail-page crawl.
- Use
maxResultsto bound the number of returned offers. - Use
postedWithinDaysandsortByto narrow large searches. - Cost scales with the number of returned
Job scrapedevents, so recent-only searches withdate_desckeep agent runs focused when the brief asks for fresh offers.
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN || 'YOUR_APIFY_TOKEN',});const run = await client.actor('khadinakbar/apec-jobs-scraper').call({searchQuery: 'directeur financier',maxResults: 10,sortBy: 'date_desc',postedWithinDays: 30,salaryMin: 80000,contractTypes: ['CDI'],});const dataset = await client.dataset(run.defaultDatasetId).listItems();console.log(dataset.items);
Best results and outcome guidance
Use a focused search query when the role family is already known, and pair it with one or two filters to keep the dataset aligned with the brief. For monitoring, date_desc with postedWithinDays keeps recent offers at the top. For compensation analysis, combine salaryMin and salaryMax with contractTypes so the returned offers are easier to compare. For broad discovery, leave searchQuery empty and use maxResults to control how many offers are collected in one run.
Continue the workflow
After you shortlist hiring companies from the company field, look them up with LinkedIn Company Search Scraper to enrich each employer with its LinkedIn page, size and industry.
Builder's note
I designed the location filter around French départements because that is how APEC itself codes each offer (Paris 13 - 75), so the same code appears in the input, in the department output field and in pasted APEC URLs.
FAQ
How is this Actor different from a generic job scraper?
This Actor is scoped to APEC.fr executive offers and exposes APEC-specific fields such as offerNumber, sectorCode, sectorParentCode, lowApplicationCount, and the APEC public URL format.
When should I use searchQuery versus postedWithinDays?
Use searchQuery for role or keyword targeting, and use postedWithinDays when you want a recent-only slice of APEC offers. The two work well together for monitoring.
Can I use this Actor for salary filtering?
Yes. The input includes salaryMin and salaryMax, and the output includes both raw salary text and parsed numeric salary bounds when APEC provides them.
How do I search one city or region?
Put a département number such as 75 or a major city such as Lyon in locations; several values can be combined. For filters the form does not offer, run the search on apec.fr and paste the result URL into startUrls.
Responsible use
Use the data in line with APEC's terms and applicable data protection rules. The Actor works with publicly accessible APEC search data and returns listing-level information for search and analysis workflows.