APEC Jobs Scraper avatar

APEC Jobs Scraper

Pricing

from $5.00 / 1,000 job scrapeds

Go to Apify Store
APEC Jobs Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

3 days ago

Last modified

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

FieldTypeDefaultNotes
searchQuerystringdata scientistFrench keyword(s) searched on APEC.fr. Searches title and description. Leave empty to browse all active offers.
locationsarray-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.
startUrlsarray-APEC search result URLs. The filters in each URL are used as-is; maxResults and sortBy still apply.
maxResultsinteger50Maximum number of job offers to return. APEC caps a single search at about 1000 results.
sortBystringdate_descrelevance, date_desc, or date_asc.
postedWithinDaysinteger-Return only offers published within the last N days.
salaryMininteger-Minimum annual gross salary in EUR.
salaryMaxinteger-Maximum annual gross salary in EUR.
contractTypesarray-CDI, CDD, FREELANCE, STAGE, or ALTERNANCE.
remoteWorkarray-FULL_REMOTE, HYBRID, OCCASIONAL, or NONE.
experienceLevelarray-JUNIOR, MID, SENIOR, or EXEC.
proxyobject{"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.

FieldTypeDescription
jobIdstringAPEC numeric offer ID.
offerNumberstringAPEC public offer number used in the public URL.
titlestringPosted job title in French.
companystring | nullCommercial name of the hiring company.
isConfidentialbooleanTrue when APEC hides the hiring company name.
locationstring | nullFree-text French location such as Paris 13 - 75.
departmentstring | nullDépartement code parsed from location, such as 75.
latitudenumber | nullLatitude when APEC provides coordinates.
longitudenumber | nullLongitude when APEC provides coordinates.
salaryTextstring | nullSalary range as written by the employer in French.
salaryMinnumber | nullParsed minimum annual gross salary in EUR.
salaryMaxnumber | nullParsed maximum annual gross salary in EUR.
contractTypestring | nullMapped APEC contract code.
contractDurationMonthsnumber | nullDuration in months for fixed-term contracts.
remoteWorkstring | nullMapped APEC remote-work code.
descriptionExcerptstring | nullFirst roughly 300 characters of the listing description.
publishedAtstring | nullPublication timestamp in ISO 8601 format.
validatedAtstring | nullValidation timestamp in ISO 8601 format.
lowApplicationCountboolean | nullAPEC flag for offers with few applications so far.
sectorCodenumber | nullAPEC internal sector ID.
sectorParentCodenumber | nullParent sector ID.
urlstringPublic 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 OUTPUT and RUN_SUMMARY: COMPLETE, PARTIAL, VALID_EMPTY (no matching offers) or INVALID_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:

  • jobId and offerNumber identify each APEC offer.
  • salaryText together with salaryMin and salaryMax supports compensation review.
  • remoteWork and contractType group offers by policy.
  • url points to the public APEC offer page.
  • descriptionExcerpt provides 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 maxResults to bound the number of returned offers.
  • Use postedWithinDays and sortBy to narrow large searches.
  • Cost scales with the number of returned Job scraped events, so recent-only searches with date_desc keep 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.