# Apec Company Details Scraper (`soft_alexist/apec-company-details-scraper`) Actor

Scrape detailed company profiles from APEC.fr with one API call. Capture ID, account info, postal address, benefits, key attributes, and version audit trails — essential for recruiters, market researchers, and HR professionals analyzing French enterprises.

- **URL**: https://apify.com/soft\_alexist/apec-company-details-scraper.md
- **Developed by:** [Soft Alexist](https://apify.com/soft_alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 86.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## APEC Company Details Scraper: Extract French Business Intelligence Data

***

### What Is APEC.fr?

APEC (Association pour l'Emploi des Cadres) is France's largest recruitment platform specializing in executive and professional positions. It hosts detailed company profiles showcasing employer information, workplace benefits, organizational structure, and hiring capabilities across France and international markets. Manually gathering this company intelligence is tedious and error-prone — the **APEC Company Details Scraper** automates extraction of rich company metadata at scale.

***

### Overview

The **APEC Company Details Scraper** extracts comprehensive company profile pages from APEC.fr, converting unstructured web content into structured, machine-readable records. It serves:

- **HR professionals** building talent market intelligence databases
- **Recruiters** evaluating employer brands and organizational structure
- **Business analysts** researching French corporate landscapes
- **Sales teams** generating B2B prospect lists with company details
- **Academic researchers** studying employment trends and corporate positioning

Key features include support for batch URL processing, graceful error handling via `ignore_url_failures`, and extraction of 13+ data fields per company profile.

***

### Input Format

The scraper accepts a minimal JSON configuration:

```json
{
  "urls": [
    "https://www.apec.fr/candidat/page-entreprise.html/detail?id=759990"
  ],
  "ignore_url_failures": true
}
```

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array of strings | Direct links to APEC company detail pages. Paste one URL per entry or use bulk edit to add multiple URLs at once |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running if individual URLs fail to load. Set to `false` to halt on first error (useful for quality assurance) |

**URL format:** Company detail pages follow the pattern `https://www.apec.fr/candidat/page-entreprise.html/detail?id=[COMPANY_ID]`

> **Pro tip:** Bulk-add URLs by preparing a list in a text editor, then paste into the bulk edit section for faster setup.

***

### Output Format

#### Example Output

```json
{
  "id": 2137,
  "id_compte": 759990,
  "id_nom_statut": 101872,
  "id_nom_situation": 30307,
  "id_interlocuteur": 100223334,
  "en_tete": {
    "banniere": "/presentation_entreprise/759990/img_759990_585200392972197_5794b2a0-5725-4c0e-bb9a-0349a960876f.png",
    "accroche": "Aider les ingénieurs à aimer l'ingénierie ",
    "raison_sociale": "RDT INGENIEURS FRANCE",
    "logo_entreprise": "/presentation_entreprise/759990/img_759990_584790658194616_645d293d-0336-49ef-8ee5-5ac1729c8eca.png"
  },
  "main_section": {
    "entreprise_titre": "Découvrez RDT ",
    "entreprise_image": null,
    "entreprise": "<p>Oui, RDT est une <strong>soci&eacute;t&eacute; de conseil en Ing&eacute;nierie</strong> G&eacute;n&eacute;raliste.</p>\n\n<p>Ce qui signifie que nous intervenons dans <strong>diff&eacute;rents domaines industriels </strong>tels que le transport, l&#39;&eacute;nergie, les &eacute;nergies nouvelles et renouvelables, la d&eacute;fense, l&#39;a&eacute;ronautique et que nos &eacute;quipes sont constitu&eacute;es &agrave; la fois d&#39;Ing&eacute;nieur.e.s, Technicien.ne.s en M&eacute;canique, Electronique, Logiciel, M&eacute;thodes et Electricit&eacute; notamment.<br />\n<br />\nNous sommes fiers de compter <strong>plus de 100 Ing&eacute;nieur.e.s, Technicien.ne.s</strong> RDT depuis notre cr&eacute;ation en France en 2019. Nous sommes aujourd&#39;hui majoritairement pr&eacute;sents sur la fa&ccedil;ade ouest de la France et nous avons deux bureaux dont un bureau d&#39;&eacute;tudes &agrave; Nantes et Poitiers.<br />\n<br />\nMais l&#39;histoire d&eacute;marre bien plus t&ocirc;t, en <strong>2006 en Espagne</strong> avec la cr&eacute;ation de RDT Engineers.<br />\n<br />\nLe groupe est pr&eacute;sent dans <strong>15 pays</strong>, accompagne pr&egrave;s de 2000 professionnels et s&#39;appuie sur de nombreux r&eacute;f&eacute;rencements internationaux.<br />\n<br />\nCe que nous vous proposons est un <strong>accompagnement fonctionnel</strong> via votre manager, et carri&egrave;re avec l&#39;&eacute;quipe Ressources Humaines.<br />\n<br />\nAu total <strong>sept points de suivi </strong>la 1&egrave;re ann&eacute;e ! Ces &eacute;changes seront r&eacute;alis&eacute;s au sein de l&#39;un de nos bureaux Nantais ou Pictavien. Parce que la proximit&eacute; est essentielle pour garantir une bonne relation, non ?</p>\n\n<p>&nbsp;</p>\n\n<p>ADRESSES :<br />\n<strong>CARQUEFOU :</strong><br />\n1 rue des Merisiers &ndash; 44470 Carquefou<br />\nT&eacute;l. : +33 (0)2 40 74 14 07<br />\n<br />\n<strong>POITIERS :</strong><br />\n1 rue Georges Leclanch&eacute; - 86000 Poitiers<br />\nT&eacute;l. : +33 (0)5 49 45 85 26</p>\n",
    "lien_video": "https://youtu.be/HTCnJrnFXsU"
  },
  "adresse_postale": {
    "adresse_batiment_imm_residence": null,
    "adresse_code_postal": "44000",
    "adresse_complement_adresse": null,
    "adresse_lieu_dit_bp": null,
    "adresse_numero_et_voie": "non renseigné",
    "adresse_ville": "NANTES",
    "audit": {
      "date_creation": 1655112564000,
      "date_modification": 1771840179000,
      "utilisateur_creation": "100223334W",
      "utilisateur_modification": "100223334W"
    },
    "id_pays": 799,
    "numero_version": 8,
    "latitude": null,
    "longitude": null,
    "id_nom_normalisation": null,
    "indicateur_q_p_v": null,
    "indicateur_z_r": null,
    "id": 134376684
  },
  "avantages": [
    {
      "id": 1767,
      "id_page_entreprise": 2137,
      "id_nom_avantage": 20843,
      "avantage": null,
      "numero_version": 4,
      "audit": {
        "date_creation": 1663771244000,
        "date_modification": 1771840179000,
        "utilisateur_creation": "100223334W",
        "utilisateur_modification": "100223334W"
      }
    },
    {
      "id": 1768,
      "id_page_entreprise": 2137,
      "id_nom_avantage": 20844,
      "avantage": "Titres restaurant - Chèque cadeau fin d'année - Mutuelle et prévoyance - CET - IK Vélos -",
      "numero_version": 4,
      "audit": {
        "date_creation": 1663771244000,
        "date_modification": 1771840179000,
        "utilisateur_creation": "100223334W",
        "utilisateur_modification": "100223334W"
      }
    },
    {
      "id": 15028,
      "id_page_entreprise": 2137,
      "id_nom_avantage": 20842,
      "avantage": null,
      "numero_version": 1,
      "audit": {
        "date_creation": 1771840175000,
        "date_modification": 1771840179000,
        "utilisateur_creation": "100223334W",
        "utilisateur_modification": "100223334W"
      }
    }
  ],
  "sections": [
    {
      "id": 5234,
      "id_page_entreprise": 2137,
      "titre": "Processus de recrutement",
      "texte_un": "<p>&nbsp;Notre <strong>processus de recrutement</strong> ?<br />\n<br />\nUn <strong>processus structur&eacute;</strong> permettant de rencontrer une grande partie de l&#39;&eacute;quipe support afin d&#39;&eacute;valuer comment avancer ensemble et cr&eacute;er des synergies autour de nos projets respectifs. Celui-ci est donc &eacute;tabli selon divers &eacute;changes :</p>\n\n<ul>\n\t<li>Un <strong>&eacute;change t&eacute;l&eacute;phonique </strong>avec une charg&eacute;e de d&eacute;veloppement et recrutement ou un responsable grands comptes pour prendre connaissance de ton projet personnel et professionnel, ta mobilit&eacute; et te pr&eacute;senter en quelques mots RDT Ing&eacute;nieurs.</li>\n</ul>\n\n<p>&nbsp;</p>\n\n<ul>\n\t<li>Un <strong>entretien culturel</strong> avec une personne de l&#39;&eacute;quipe Recrutement pour faire plus ample connaissance, comprendre ton parcours et ton projet, te pr&eacute;senter notre fonctionnement nos m&eacute;tiers nos environnements de travail et &eacute;valuer notre compatibilit&eacute;.</li>\n</ul>\n\n<p>&nbsp;</p>\n\n<ul>\n\t<li>Un <strong>entretien technique</strong> pour aller plus loin notamment sur tes comp&eacute;tences, r&eacute;alisations et pr&eacute;sentation des projets RDT Ing&eacute;nieurs.</li>\n</ul>\n\n<ul>\n\t<li>L&#39;<strong>entretien contractuel </strong>est pr&eacute;vu pour te pr&eacute;senter les aspects contractuels : salarial et avantages. Il te permet &eacute;galement de faire connaissance si ce n&#39;est pas d&eacute;j&agrave; le cas avec la team pilote : C&eacute;line, Directrice D&eacute;veloppement et Recrutement ou Christopher, Directeur de RDT Ing&eacute;nieurs.</li>\n</ul>\n",
      "image_une": "/presentation_entreprise/759990/img_759990_585163280667966_1db72972-aba8-49e8-b244-373db505b2d9.jpg",
      "texte_deux": null,
      "image_deux": "/presentation_entreprise/759990/img_759990_586651681514564_ad4f00e8-4629-46e4-89be-ea6eff195e47.jpg",
      "numero_version": 1,
      "audit": {
        "date_creation": 1771840176000,
        "date_modification": 1771840179000,
        "utilisateur_creation": "100223334W",
        "utilisateur_modification": "100223334W"
      }
    }
  ],
  "elt_cles": {
    "annee_creation": 2019,
    "secteur_activite": 101609,
    "effectif": 596782,
    "chiffre_affaires": null,
    "parite_f_h": null,
    "anciennete_moyenne": 33.0,
    "taux_seniors": null,
    "taux_jeunes_diplomes": null,
    "taux_cadres": null,
    "site_web": "https://www.rdtingenieros.com/fr/",
    "site_carrieres": "https://www.rdt.com/",
    "email": "emilie.favre@rdt.com",
    "lien_facebook": null,
    "lien_instagram": "https://www.instagram.com/lifeatrdt?igsh=MWFleDh4NnoycDBsag==",
    "lien_linkedin": "https://www.linkedin.com/company/rdt-com/",
    "lien_twitter": null,
    "lien_youtube": "https://youtu.be/HTCnJrnFXsU"
  },
  "numero_version": 13,
  "audit": {
    "date_creation": 1655112564000,
    "date_modification": 1771840179000,
    "utilisateur_creation": "100223334W",
    "utilisateur_modification": "100223334W"
  }
}
```

Each company record contains 13 structured fields:

#### Identification & Account Data

| Field | Description & Purpose |
|---|---|
| `ID` | Unique company identifier within APEC's system. Use this to deduplicate records across multiple scraper runs or database syncs. Essential for linking company data across platforms. |
| `ID Compte` | Account ID associated with the company profile. Identifies the account holder/organization managing the profile. Useful for multi-entity companies or corporate groups. |
| `ID Nom Statut` | Status name identifier (e.g., "Active", "Suspended"). Indicates regulatory or operational status. Filter by this field to focus only on actively hiring or verified companies. |
| `ID Nom Situation` | Situation name identifier (e.g., "Recruiting", "Not Recruiting"). Signals current hiring intent. Helps recruiters prioritize warm prospects. |
| `ID Interlocuteur` | Contact person identifier linked to the company. References the primary company representative managing APEC interactions. |

#### Company Profile & Content

| Field | Description & Purpose |
|---|---|
| `En Tête` | Company header/title section. Contains the company name, logo reference, and primary branding elements as displayed on APEC. Use for display purposes and brand consistency checks. |
| `Main Section` | Core company description and overview. Includes company mission, industry vertical, size, and organizational highlights. Critical for market research and employer brand analysis. |
| `Adresse Postale` | Postal address of the company headquarters or primary office. Essential for location-based recruiting, regional market analysis, and contact database building. |
| `Avantages` | Employee benefits and perks (e.g., remote work, health insurance, professional development). Highlight competitive advantages. Use in recruiter outreach materials or talent attraction strategies. |

#### Structural & Administrative Data

| Field | Description & Purpose |
|---|---|
| `Sections` | Organizational sections/departments listed in the company profile (e.g., "Engineering", "HR", "Sales"). Useful for mapping company structure and identifying hiring pockets. |
| `Éléments Clés` | Key attributes or tags (e.g., "ISO certified", "Export-focused", "Startup"). Summary of defining characteristics. Filter companies by these elements for targeted prospecting. |
| `Numéro Version` | Version number of the profile data. Tracks profile edits over time. Helps identify recently updated company information or stale records. |
| `Audit` | Audit trail or modification timestamp. Records when the profile was last updated. Useful for monitoring company profile freshness and historical analysis. |

***

### How to Use

1. **Find company URLs** — Browse APEC.fr, navigate to a company detail page, and copy the URL (includes the `id` parameter).
2. **Prepare your list** — Gather all company URLs you wish to scrape. Use bulk edit if adding 10+ URLs.
3. **Configure the scraper** — Paste URLs into the `urls` array. Leave `ignore_url_failures` as `true` for uninterrupted batch runs.
4. **Execute the run** — Start the scraper and monitor progress in the logs.
5. **Export and process** — Download results as JSON, CSV, or Excel; import into your CRM, BI tool, or data warehouse.

**Handling common issues:**

- **URL returns no data:** Verify the company ID is still active on APEC (older IDs may be archived).
- **Network timeouts:** Increase retry logic by re-running with the same URL; APEC's servers are generally reliable.
- **Incomplete fields:** Some companies may not populate all fields (e.g., `Avantages` is optional). Treat missing fields as `null` and plan data validation accordingly.

***

### Use Cases & Business Value

- **Talent intelligence:** Monitor hiring activity and organizational changes among target employers
- **Competitive analysis:** Track rival companies' benefits packages, structure, and expansion
- **Lead generation:** Build B2B sales pipelines with accurate company contact and benefit information
- **Market research:** Study French corporate landscape trends, company growth, and industry composition
- **HR benchmarking:** Compare compensation and benefits packages across peer companies

By automating company data extraction, the **APEC Company Details Scraper** eliminates manual research hours and delivers consistent, actionable intelligence for recruitment, sales, and strategic planning.

***

### Conclusion

The **APEC Company Details Scraper** is an indispensable tool for professionals navigating France's business landscape. With 13+ structured data fields and flexible batch processing, it transforms APEC's vast company directory into a strategic asset. Whether you're recruiting talent, analyzing competitors, or building market intelligence, this scraper delivers accurate, timely data at scale.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Specific company urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## Actor input object example

```json
{
  "urls": [
    "https://www.apec.fr/candidat/page-entreprise.html/detail?id=759990"
  ],
  "ignore_url_failures": true
}
```

# 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 = {
    "urls": [
        "https://www.apec.fr/candidat/page-entreprise.html/detail?id=759990"
    ],
    "ignore_url_failures": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("soft_alexist/apec-company-details-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 = {
    "urls": ["https://www.apec.fr/candidat/page-entreprise.html/detail?id=759990"],
    "ignore_url_failures": True,
}

# Run the Actor and wait for it to finish
run = client.actor("soft_alexist/apec-company-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.apec.fr/candidat/page-entreprise.html/detail?id=759990"
  ],
  "ignore_url_failures": true
}' |
apify call soft_alexist/apec-company-details-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/I0sHhdK23V7Voev7S/builds/sTKhl1IeMx0oRZKYa/openapi.json
