{
  "openapi": "3.0.1",
  "info": {
    "title": "France RGE & Qualiopi Scraper: Certified Company Leads",
    "description": "Official French lists: RGE contractors (entreprises RGE, artisans RGE, Qualibat, QualiPAC: heat pumps, solar, insulation; 59,000 with phone and email) and training providers (organismes de formation, Qualiopi). Optional directors, headcount, revenue. Alerts on new certifications.",
    "version": "0.1",
    "x-build-id": "bJqeKm2KI47kuiYBg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/euroscrape~france-certified-companies/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-euroscrape-france-certified-companies",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/euroscrape~france-certified-companies/runs": {
      "post": {
        "operationId": "runs-sync-euroscrape-france-certified-companies",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/euroscrape~france-certified-companies/run-sync": {
      "post": {
        "operationId": "run-sync-euroscrape-france-certified-companies",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "list": {
            "title": "Which official list",
            "enum": [
              "rge",
              "training"
            ],
            "type": "string",
            "description": "RGE: about 59,000 French building and energy contractors with an RGE quality label (required for MaPrimeRénov' and CEE subsidies), with phone, email and website. Training: about 155,000 registered training providers, 46,000 of them Qualiopi-certified, with their number of trainees and trainers.",
            "default": "rge"
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "French department numbers, e.g. 69, 75, 13, 2A, 974. Leave empty for all of France. Training list: the Ministry publishes no address for 57% of providers; those can only be found with \"regions\" (the run tells you how many).",
            "items": {
              "type": "string"
            }
          },
          "postalCodes": {
            "title": "Postal codes",
            "type": "array",
            "description": "5-digit postal codes, e.g. 69007. Combined with departments (OR).",
            "items": {
              "type": "string"
            }
          },
          "searchText": {
            "title": "Name contains",
            "type": "string",
            "description": "Keep only companies whose name contains these words."
          },
          "domains": {
            "title": "RGE work domains",
            "type": "array",
            "description": "RGE list only. Keep companies certified for at least one of these domains (heat pumps, solar PV, insulation…). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "Isolation par l'intérieur des murs ou rampants de toitures  ou plafonds",
                "Chauffe-Eau Thermodynamique",
                "Pompe à chaleur : chauffage",
                "Fenêtres, volets, portes donnant sur l'extérieur",
                "Isolation des combles perdus",
                "Isolation des murs par l'extérieur",
                "Poêle ou insert bois",
                "Isolation des toitures terrasses ou des toitures par l'extérieur",
                "Ventilation mécanique",
                "Fenêtres de toit",
                "Panneaux solaires photovoltaïques",
                "Audit énergétique Maison individuelle",
                "Chaudière condensation ou micro-cogénération gaz ou fioul",
                "Isolation des planchers bas",
                "Radiateurs électriques, dont régulation.",
                "Architecte",
                "Chaudière bois",
                "Audit énergétique Logement collectif",
                "Chauffage et/ou eau chaude solaire",
                "Etude thermique reglementaire",
                "Etude solaire photovoltaïque",
                "Etude forage géothermique",
                "Etude bois énergie",
                "Etude ACV",
                "Projet complet de rénovation",
                "Etude système technique bâtiment",
                "Etude solaire thermique",
                "Etude eclairage",
                "Etude enveloppe du bâtiment",
                "Commisionnement",
                "Forage géothermique"
              ],
              "enumTitles": [
                "Interior wall, roof slope or ceiling insulation",
                "Heat pump water heater",
                "Heat pump (heating)",
                "Windows, shutters, exterior doors",
                "Loft insulation",
                "External wall insulation",
                "Wood stove or insert",
                "Flat or external roof insulation",
                "Mechanical ventilation",
                "Roof windows",
                "Solar PV panels",
                "Energy audit (house)",
                "Condensing or micro-CHP boiler (gas, oil)",
                "Floor insulation",
                "Electric radiators and controls",
                "Architect",
                "Wood boiler",
                "Energy audit (apartment building)",
                "Solar heating or hot water",
                "Regulatory thermal study",
                "Solar PV study",
                "Geothermal drilling study",
                "Wood energy study",
                "Life-cycle assessment study",
                "Complete renovation project",
                "Building systems study",
                "Solar thermal study",
                "Lighting study",
                "Building envelope study",
                "Commissioning",
                "Geothermal drilling"
              ]
            }
          },
          "workCategories": {
            "title": "RGE work categories",
            "type": "array",
            "description": "RGE list only. Broader than domains.",
            "items": {
              "type": "string",
              "enum": [
                "Travaux d'efficacité énergétique",
                "Installations d'énergies renouvelables",
                "Etudes énergétiques",
                "Rénovation globale"
              ],
              "enumTitles": [
                "Energy efficiency works",
                "Renewable energy installations",
                "Energy studies",
                "Whole-house renovation"
              ]
            }
          },
          "certificationBodies": {
            "title": "Certification bodies",
            "type": "array",
            "description": "RGE list only.",
            "items": {
              "type": "string",
              "enum": [
                "qualibat",
                "qualitenr",
                "opqibi",
                "cnoa",
                "qualifelec",
                "cerqual",
                "afnor",
                "certibat",
                "opqtecc",
                "lne"
              ],
              "enumTitles": [
                "Qualibat",
                "Qualit'EnR (QualiPAC, QualiPV, QualiSol, QualiBois)",
                "OPQIBI (engineering)",
                "CNOA (architects)",
                "Qualifelec",
                "Cerqual",
                "AFNOR",
                "Certibat",
                "OPQTECC",
                "LNE"
              ]
            }
          },
          "worksForIndividuals": {
            "title": "Works for private homeowners",
            "enum": [
              "any",
              "yes",
              "no"
            ],
            "type": "string",
            "description": "RGE list only.",
            "default": "any"
          },
          "certifiedSince": {
            "title": "Newly certified since",
            "type": "string",
            "description": "RGE list only. Keep companies with a qualification that started on or after this date (YYYY-MM-DD): fresh leads."
          },
          "expiringBefore": {
            "title": "Qualification expiring before",
            "type": "string",
            "description": "RGE list only. Keep companies with a qualification that ends on or before this date (renewal leads for certification consultants and trainers)."
          },
          "includeExpired": {
            "title": "Include expired qualifications",
            "type": "boolean",
            "description": "RGE list only. By default only qualifications valid today are kept.",
            "default": false
          },
          "qualiopi": {
            "title": "Qualiopi certification",
            "enum": [
              "any",
              "trainingActions",
              "apprenticeship",
              "skillsAssessment",
              "vae",
              "notCertified",
              "notRequired"
            ],
            "type": "string",
            "description": "Training list only.",
            "default": "any"
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Training list only. INSEE region codes (e.g. 11 Île-de-France, 84 Auvergne-Rhône-Alpes, 93 Provence-Alpes-Côte d'Azur). Unlike departments, a region also finds the providers whose address is not published.",
            "items": {
              "type": "string",
              "enum": [
                "11",
                "24",
                "27",
                "28",
                "32",
                "44",
                "52",
                "53",
                "75",
                "76",
                "84",
                "93",
                "94",
                "01",
                "02",
                "03",
                "04",
                "06"
              ],
              "enumTitles": [
                "Île-de-France",
                "Centre-Val de Loire",
                "Bourgogne-Franche-Comté",
                "Normandie",
                "Hauts-de-France",
                "Grand Est",
                "Pays de la Loire",
                "Bretagne",
                "Nouvelle-Aquitaine",
                "Occitanie",
                "Auvergne-Rhône-Alpes",
                "Provence-Alpes-Côte d'Azur",
                "Corse",
                "Guadeloupe",
                "Martinique",
                "Guyane",
                "La Réunion",
                "Mayotte"
              ]
            }
          },
          "specialties": {
            "title": "Training specialties",
            "type": "array",
            "description": "Training list only. NSF codes (e.g. 312 sales, 326 IT, 330 health and social) or words found in the specialty (\"langues\", \"informatique\", \"sécurité\").",
            "items": {
              "type": "string"
            }
          },
          "minTrainees": {
            "title": "Minimum trainees per year",
            "minimum": 0,
            "type": "integer",
            "description": "Training list only. Size filter from the provider's last annual declaration."
          },
          "minTrainers": {
            "title": "Minimum trainers",
            "minimum": 0,
            "type": "integer",
            "description": "Training list only."
          },
          "sortBy": {
            "title": "Sort training providers by",
            "enum": [
              "trainees",
              "trainers",
              "recentDeclaration",
              "name"
            ],
            "type": "string",
            "description": "Training list only. RGE companies always come most recently certified first.",
            "default": "trainees"
          },
          "maxItems": {
            "title": "Max companies",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Companies (or training providers) to deliver. Each one is charged once.",
            "default": 100
          },
          "includeSummary": {
            "title": "Add a free summary row",
            "type": "boolean",
            "description": "Counts of matching companies, by department, domain or specialty.",
            "default": true
          },
          "includeCompanyProfile": {
            "title": "Add the official company profile (directors, headcount, legal form, revenue)",
            "type": "boolean",
            "description": "For each company, also read its official profile from the French company register API (SIRENE / RNE): legal form, NAF activity, creation date, headcount range, directors (name and role), latest revenue and net income when published, VAT number, sole-proprietor flag. Charged per profile found ($2 / 1,000). Adds about 0.2 s per company.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Set a name and schedule the Actor (e.g. weekly): the first run is the baseline; next runs deliver only NEW companies (RGE: companies with a new qualification; training: providers new in the list), with alerts."
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Alerts on Telegram: create a bot with @BotFather and paste its token."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Alerts on Discord: channel settings → Integrations → Webhooks → copy the URL."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Alerts on Slack: an incoming webhook URL (api.slack.com/messaging/webhooks)."
          },
          "webhookUrl": {
            "title": "Webhook URL (JSON POST)",
            "type": "string",
            "description": "Make, Zapier, n8n or your own endpoint."
          },
          "maxNotifications": {
            "title": "Max alerts per run",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Monitoring mode: at most this many new companies are sent as alerts per run (all of them are still in the dataset).",
            "default": 30
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}