# GoWork FR & DE Company Reviews and Profile Scraper (`abotapi/gowork-eu-scraper`) Actor

Extract company profiles from GoWork France and Germany, including contact details, review threads with replies, ratings breakdowns, opening hours, social links, SIREN/NAF identifiers, and 100+ structured company fields. Supports keyword search, URL input, and bulk sitemap discovery.

- **URL**: https://apify.com/abotapi/gowork-eu-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Lead generation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## GoWork FR + DE: Company Reviews, Ratings, and Profile Data

Pulls company profiles from GoWork France (gowork.fr) and Germany (gowork.de), the largest employer-review portals in those markets. One run gives you company contact info, full review threads with replies, star-rating histograms, opening hours, social links, FR company identifiers (SIREN, NAF code), and 100+ structured fields per company. Three start modes: free-text search, paste-in URLs, or bulk sitemap discovery.

### Why this scraper

- 130+ structured fields per company (vs ~50 in legacy alternatives), including parsed geo coordinates, SIRET, employee count min/max, capital amount/currency, full review thread tree with replies, rating histogram with star counts and percentages, opening hours, trusted partners list, social links (LinkedIn, Instagram, Facebook, Twitter, YouTube, TikTok), and computed fields (response rate, reply count, language distribution, year distribution).
- Auto-paging on search and URL-mode SERP URLs.
- Two locales out of the box: France and Germany.
- Three start modes. Search by query, paste a list of URLs (multi-URL, forward-paginated), or walk the sitemap for bulk discovery.
- Two output shapes via the `output` field: `company` (default; one row per company with reviews nested) or `reviews` (flat; one row per review with company context joined in, ideal for BI).
- Multi-search isolation, so 3 queries x 5 listings each does not all come from query #1.
- $1 per 1K results on Gold plan with the lean (no detail) mode; only $0.50 / 1K extra on detail enrichment when you need the full review history.

### Data you get

Sample shape; values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| `slug` | `sample-company-paris` |
| `url` | `https://gowork.fr/sample-company-paris` |
| `siteLocale` | `fr` |
| `org_name` | `Sample Company` |
| `longName` | `SAMPLE COMPANY SAS` |
| `org_telephone` | `+33100000000` |
| `companyEmail` | `contact@example.com` |
| `companyWebsite` | `https://example.com/` |
| `companyLinkedInUrl` | `https://fr.linkedin.com/company/sample` |
| `companyInstagramUrl` | `https://www.instagram.com/sample/` |
| `companyFacebookUrl` | `https://www.facebook.com/sample/` |
| `org_street_address` | `1 Rue de Sample, 75001 PARIS` |
| `postalCode` | `75001` |
| `org_address_locality` | `Paris` |
| `org_address_region` | `Île-de-France` |
| `org_address_country` | `FR` |
| `latitude` / `longitude` | `48.8566 / 2.3522` |
| `siren` | `000000000` |
| `siret` | `00000000000000` |
| `nafCode` | `0000A` |
| `companyEmployeeCountLabel` | `501-1000` |
| `companyEmployeeCountMin` / `Max` | `501` / `1000` |
| `companyCapital` | `50000 EUR` |
| `companyCapitalAmount` / `Currency` | `50000` / `EUR` |
| `companyFoundedDate` | `2017-09-06` |
| `businessTradeName` | `Industry sector` |
| `companyBusinessArea` | `Industry & Manufacturing` |
| `companyActivityDescription` | `Operational engineering consulting...` |
| `org_rating_value` | `4.8` |
| `org_rating_count` | `4` |
| `pageGlobalReviewCount` | `21` |
| `ratingStar1Count`..`ratingStar5Count` | `0, 0, 0, 1, 3` |
| `ratingStar1Percent`..`ratingStar5Percent` | `0, 0, 0, 25, 75` |
| `ratingHistogramScoredTotal` | `4` |
| `companyOpeningHoursJson` | `{"lundi":"08:00-19:00", ...}` |
| `companyTrustedPartnersJson` | `[{"name":"Partner","profileUrl":"...","logoUrl":"..."}]` |
| `companyTrustedPartnersCount` | `13` |
| `breadcrumbs` | `[{"name":"Sample","url":"/avis/sample"}, ...]` |
| `keywords` | `["sector","activity","tag1"]` |
| `companySocialLinks` | `[{"network":"linkedin","url":"..."}, ...]` |
| `firstReviewDate` / `lastReviewDate` | `2021-04-23T16:43:00.000Z` |
| `responseRate` | `60` |
| `avgRepliesPerReview` | `1.3` |
| `replyCountTotal` | `13` |
| `reviewLanguagesAvailable` | `["fr"]` |
| `reviewYearDistribution` | `{"2024": 5, "2025": 3}` |
| `reviews` | array of `{reviewId, reviewerName, reviewDate, content, ratingValue, languageCode, authorKind, replies[]}` |
| `mainTextPreview` | `Operational engineering, hiring info...` |
| `pageTitle`, `metaDescription`, `ogTitle`, ... | full SEO bundle |
| `jsonLd` | raw JSON-LD blocks |
| `scrapedAt` | `2026-01-01T00:00:00.000Z` |

### How to use

Search by query (lean, no detail enrichment):

```json
{
  "mode": "search",
  "locale": "fr",
  "queries": ["Carrefour"],
  "fetchDetails": false,
  "maxListings": 25
}
````

Search with full detail enrichment (review threads, opening hours, histogram):

```json
{
  "mode": "search",
  "locale": "fr",
  "queries": ["Carrefour", "Auchan"],
  "fetchDetails": true,
  "maxPages": 2,
  "maxListings": 50,
  "maxReviewsPerCompany": 100
}
```

URL mode (paste detail URLs or search URLs):

```json
{
  "mode": "url",
  "urls": [
    "https://gowork.fr/b-hive-mulhouse",
    "https://gowork.fr/search?q=Carrefour&page=2",
    "https://gowork.de/lidl-deutschland-bad-wildungen"
  ],
  "fetchDetails": true,
  "maxListings": 30
}
```

Sitemap mode (bulk discovery; free-text filter is optional):

```json
{
  "mode": "sitemap",
  "locale": "fr",
  "sitemapKind": "constant",
  "sitemapFilter": "lidl",
  "fetchDetails": true,
  "maxListings": 100
}
```

Reviews-only output (one row per review, company fields joined in; BI-friendly):

```json
{
  "mode": "url",
  "urls": ["https://gowork.fr/b-hive-mulhouse"],
  "output": "reviews",
  "maxReviewsPerCompany": 50
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | enum | `search` | `search`, `url`, or `sitemap` |
| `locale` | enum | `fr` | `fr` (gowork.fr) or `de` (gowork.de). URL mode auto-detects from host. |
| `queries` | string\[] | `["Carrefour"]` | Free-text search terms. One query per SERP walk. |
| `urls` | string\[] | `["https://gowork.fr/b-hive-mulhouse"]` | Detail URLs or search URLs (multi, forward-paginated) |
| `sitemapKind` | enum | `constant` | `constant` / `cities` / `regions` / `rankings` / `all` |
| `sitemapFilter` | string | `""` | Case-insensitive substring filter on the slug |
| `output` | enum | `company` | `company` (one row per company; reviews nested) or `reviews` (one row per review; company fields joined in). reviews auto-enables fetchDetails. |
| `fetchDetails` | boolean | `true` | OFF returns SERP-only records (cheaper). ON parses every detail page. |
| `maxPages` | integer | `5` | Pagination cap per query / per SERP URL |
| `maxListings` | integer | `25` | Total cap across the run. `0` = unlimited. |
| `maxReviewsPerCompany` | integer | `50` | Cap on review threads per company. `0` = unlimited. |
| `minRating` | integer | `0` | Skip companies whose average rating is below this. |
| `minReviewCount` | integer | `0` | Skip companies with fewer than N total reviews. |
| `ratedOnly` | boolean | `false` | Skip companies with no rated reviews. |
| `verifiedOnly` | boolean | `false` | Skip unverified companies. |
| `proxy` | object | Apify Residential FR | Apify residential is required; FR for `.fr`, DE for `.de`. |

### Output example

Sample shape; values are illustrative placeholders, not from a live listing.

```json
{
  "source": "gowork_detail",
  "slug": "sample-company-paris",
  "url": "https://gowork.fr/sample-company-paris",
  "siteLocale": "fr",
  "scrapedAt": "2026-01-01T00:00:00.000Z",
  "pageTitle": "Avis sur Sample Company - 21 avis - GoWork.fr",
  "h1": "Avis Sample Company",
  "htmlLang": "fr-FR",
  "ogImage": "https://gowork.fr/assets/images/sharing/thread/cover-fr.jpg",
  "canonicalUrl": "https://gowork.fr/sample-company-paris",
  "isUpstreamChallenge": false,
  "org_name": "SAMPLE COMPANY",
  "longName": "SAMPLE COMPANY SAS",
  "org_telephone": "+33100000000",
  "org_tax_id": "000000000",
  "org_description": "Operational engineering consulting...",
  "org_founding_date": "2017-09-06",
  "org_street_address": "1 Rue de Sample, 75001 PARIS",
  "org_address_locality": "Paris",
  "org_address_region": "Île-de-France",
  "org_address_country": "FR",
  "postalCode": "75001",
  "latitude": 48.8566,
  "longitude": 2.3522,
  "siren": "000000000",
  "siret": "00000000000000",
  "nafCode": "0000A",
  "activityShortLabel": "Engineering, technical studies",
  "companyEmployeeCountLabel": "501-1000",
  "companyEmployeeCountMin": 501,
  "companyEmployeeCountMax": 1000,
  "companyEmail": "contact@example.com",
  "companyWebsite": "https://example.com/",
  "companyLinkedInUrl": "https://fr.linkedin.com/company/sample",
  "companyInstagramUrl": "https://www.instagram.com/sample/",
  "companyFacebookUrl": null,
  "companyTwitterUrl": null,
  "companyYouTubeUrl": null,
  "companyTikTokUrl": null,
  "companySocialLinks": [
    { "network": "linkedin", "url": "https://fr.linkedin.com/company/sample" },
    { "network": "instagram", "url": "https://www.instagram.com/sample/" }
  ],
  "companyBusinessArea": "Industry & Manufacturing",
  "companyActivityDescription": "Operational engineering consulting and design office...",
  "businessTradeName": "Engineering and architecture",
  "businessTradeSlug": "engineering-architecture",
  "companyCapital": "50000 EUR",
  "companyCapitalAmount": 50000,
  "companyCapitalCurrency": "EUR",
  "companyFoundedDate": "2017-09-06",
  "companyOpeningHoursJson": "{\"lundi\":\"08:00-19:00\", ...}",
  "companyOpeningHoursText": "lundi: 08:00-19:00; mardi: 08:00-19:00; ...",
  "companyTrustedPartnersJson": "[{\"name\":\"Partner\", \"profileUrl\":\"...\"}]",
  "companyTrustedPartnersCount": 13,
  "org_rating_value": 4.8,
  "org_rating_count": 4,
  "org_review_count": 4,
  "pageGlobalRating": 4.8,
  "pageGlobalReviewCount": 21,
  "ratingHistogramScoredTotal": 4,
  "ratingStar1Count": 0,
  "ratingStar2Count": 0,
  "ratingStar3Count": 0,
  "ratingStar4Count": 1,
  "ratingStar5Count": 3,
  "ratingStar1Percent": 0,
  "ratingStar2Percent": 0,
  "ratingStar3Percent": 0,
  "ratingStar4Percent": 25,
  "ratingStar5Percent": 75,
  "statisticsRuCount": 10,
  "statisticsRuRootCount": 4,
  "subscriptionsCount": 1,
  "responseRate": 60,
  "avgRepliesPerReview": 1.3,
  "replyCountTotal": 13,
  "reviewLanguagesAvailable": ["fr"],
  "reviewYearDistribution": { "2024": 5, "2025": 3 },
  "firstReviewDate": "2021-04-23T16:43:00.000Z",
  "lastReviewDate": "2026-02-17T13:11:00.000Z",
  "reviews": [
    {
      "reviewId": "00000000-0000-0000-0000-000000000000",
      "reviewerName": "Jane Doe",
      "reviewDate": "01-01-2026 00:00",
      "reviewDateIso": "2026-01-01T00:00:00.000Z",
      "content": "Sample review text appears here.",
      "contentLength": 32,
      "ratingValue": 4,
      "languageCode": "fr",
      "authorKind": "ANONYMOUS",
      "replies": [
        {
          "replyId": "00000000-0000-0000-0000-000000000001",
          "authorName": "Sample Reply",
          "content": "Reply text appears here.",
          "date": "02-01-2026 00:00",
          "dateIso": "2026-01-02T00:00:00.000Z"
        }
      ]
    }
  ],
  "breadcrumbs": [{ "name": "Sample", "url": "/avis/sample" }],
  "keywords": ["industry", "engineering"],
  "companyLogoUrl": "https://example.com/logo.png",
  "mainTextPreview": "Operational engineering, hiring info... (preview)",
  "jsonLd": [
    { "@context": "https://schema.org", "@type": "Organization", "name": "SAMPLE COMPANY" }
  ]
}
```

### Plan and connection

GoWork is gated by an upstream edge filter that prefers residential connections. This scraper:

- Defaults to Apify Residential FR (or DE for the German locale). Datacenter is rejected.
- Free-tier Apify accounts do not include residential proxies. To run on Free, paste your own residential URLs in the proxy field, or upgrade to Starter or above.
- The scraper caches a passing connection in a named key-value store and reuses it for ~25 minutes, so a 100-record run typically pays one connection setup, not 100.

### Pricing (Pay per event)

- Per result (auto): $1.00 / 1K on Gold tier.
- Per detail enrichment (custom event, only fires when `fetchDetails: true` and the detail parse succeeds): $0.50 / 1K on Gold tier.
- A lean run that returns SERP-only records pays only the per-result rate.

# Actor input Schema

## `mode` (type: `string`):

Pick how to seed companies. search: free-text queries. url: paste detail or search URLs (multi). sitemap: walk the gowork.fr or gowork.de sitemap index for bulk discovery.

## `locale` (type: `string`):

Applies to search and sitemap modes. URL mode infers locale from the host (gowork.fr vs gowork.de) automatically.

## `queries` (type: `array`):

Search terms (company name, brand, or keyword). One query becomes one SERP walk.

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

Paste detail URLs (e.g. https://gowork.fr/b-hive-mulhouse) or full search URLs (e.g. https://gowork.fr/search?q=Carrefour\&page=2). Multi-URL supported. Filter-mode fields are ignored. Search URLs auto-paginate forward.

## `sitemapKind` (type: `string`):

Which sitemap shard family to walk. "constant" yields company profile URLs and is the most useful for bulk seeding.

## `sitemapFilter` (type: `string`):

Case-insensitive substring filter applied to discovered URLs (matches the slug part). Empty = no filter.

## `output` (type: `string`):

company: standard one-record-per-company shape with reviews nested. reviews: flat shape, each review becomes its own row with companySlug / companyName / companySiteLocale / companyRating / etc. joined in. reviews mode auto-enables fetchDetails.

## `fetchDetails` (type: `boolean`):

When ON, fetches each detail page and extracts the full Nuxt payload, opening hours, all reviews, histogram, social links, NAF code, geo. When OFF, only SERP-card data is returned (no detail surcharge). Auto-promoted to ON when output=reviews.

## `maxPages` (type: `integer`):

Pagination ceiling per search query / per SERP URL. 0 = unlimited (walk until end of results or maxListings cap is hit). URL-mode detail URLs ignore this.

## `maxListings` (type: `integer`):

Hard ceiling on companies returned across the whole run, regardless of mode (search / url / sitemap). 0 = unlimited (only bounded by Apify's per-run timeout). This is the authoritative budget cap, applied AFTER per-search pagination.

## `maxReviewsPerCompany` (type: `integer`):

Cap on review threads (each thread can also include replies) returned per company. 0 = unlimited.

## `minRating` (type: `integer`):

Skip companies whose aggregate rating is below this threshold (0-5). Applied client-side.

## `minReviewCount` (type: `integer`):

Skip companies with fewer than N total reviews.

## `ratedOnly` (type: `boolean`):

Skip companies whose JSON-LD aggregate rating count is zero (i.e., no scored reviews on file).

## `verifiedOnly` (type: `boolean`):

Skip companies marked as unverified (status flag from the Nuxt payload).

## `proxy` (type: `object`):

GoWork uses an upstream edge filter that prefers residential connections. Apify Residential FR (default) or DE lifts it naturally for most pages. Datacenter is rejected.

## Actor input object example

```json
{
  "mode": "search",
  "locale": "fr",
  "queries": [
    "Carrefour"
  ],
  "urls": [
    "https://gowork.fr/b-hive-mulhouse"
  ],
  "sitemapKind": "constant",
  "sitemapFilter": "",
  "output": "company",
  "fetchDetails": true,
  "maxPages": 0,
  "maxListings": 25,
  "maxReviewsPerCompany": 50,
  "minRating": 0,
  "minReviewCount": 0,
  "ratedOnly": false,
  "verifiedOnly": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `reviewsSummary` (type: `string`):

No description

## `reviewsFlat` (type: `string`):

No description

# 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 = {
    "queries": [
        "Carrefour"
    ],
    "urls": [
        "https://gowork.fr/b-hive-mulhouse"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/gowork-eu-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 = {
    "queries": ["Carrefour"],
    "urls": ["https://gowork.fr/b-hive-mulhouse"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/gowork-eu-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 '{
  "queries": [
    "Carrefour"
  ],
  "urls": [
    "https://gowork.fr/b-hive-mulhouse"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call abotapi/gowork-eu-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GoWork FR & DE Company Reviews and Profile Scraper",
        "description": "Extract company profiles from GoWork France and Germany, including contact details, review threads with replies, ratings breakdowns, opening hours, social links, SIREN/NAF identifiers, and 100+ structured company fields. Supports keyword search, URL input, and bulk sitemap discovery.",
        "version": "1.6",
        "x-build-id": "8Y7Z7wC60adMGDRDY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~gowork-eu-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-gowork-eu-scraper",
                "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/abotapi~gowork-eu-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-gowork-eu-scraper",
                "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/abotapi~gowork-eu-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-gowork-eu-scraper",
                "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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Start mode",
                        "enum": [
                            "search",
                            "url",
                            "sitemap"
                        ],
                        "type": "string",
                        "description": "Pick how to seed companies. search: free-text queries. url: paste detail or search URLs (multi). sitemap: walk the gowork.fr or gowork.de sitemap index for bulk discovery.",
                        "default": "search"
                    },
                    "locale": {
                        "title": "Site locale",
                        "enum": [
                            "fr",
                            "de"
                        ],
                        "type": "string",
                        "description": "Applies to search and sitemap modes. URL mode infers locale from the host (gowork.fr vs gowork.de) automatically.",
                        "default": "fr"
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Search terms (company name, brand, or keyword). One query becomes one SERP walk.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "urls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste detail URLs (e.g. https://gowork.fr/b-hive-mulhouse) or full search URLs (e.g. https://gowork.fr/search?q=Carrefour&page=2). Multi-URL supported. Filter-mode fields are ignored. Search URLs auto-paginate forward.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sitemapKind": {
                        "title": "Sitemap kind",
                        "enum": [
                            "constant",
                            "cities",
                            "regions",
                            "rankings",
                            "all"
                        ],
                        "type": "string",
                        "description": "Which sitemap shard family to walk. \"constant\" yields company profile URLs and is the most useful for bulk seeding.",
                        "default": "constant"
                    },
                    "sitemapFilter": {
                        "title": "Sitemap URL keyword filter (optional)",
                        "type": "string",
                        "description": "Case-insensitive substring filter applied to discovered URLs (matches the slug part). Empty = no filter.",
                        "default": ""
                    },
                    "output": {
                        "title": "Output shape",
                        "enum": [
                            "company",
                            "reviews"
                        ],
                        "type": "string",
                        "description": "company: standard one-record-per-company shape with reviews nested. reviews: flat shape, each review becomes its own row with companySlug / companyName / companySiteLocale / companyRating / etc. joined in. reviews mode auto-enables fetchDetails.",
                        "default": "company"
                    },
                    "fetchDetails": {
                        "title": "Fetch full company detail (recommended)",
                        "type": "boolean",
                        "description": "When ON, fetches each detail page and extracts the full Nuxt payload, opening hours, all reviews, histogram, social links, NAF code, geo. When OFF, only SERP-card data is returned (no detail surcharge). Auto-promoted to ON when output=reviews.",
                        "default": true
                    },
                    "maxPages": {
                        "title": "Max SERP pages per search",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Pagination ceiling per search query / per SERP URL. 0 = unlimited (walk until end of results or maxListings cap is hit). URL-mode detail URLs ignore this.",
                        "default": 0
                    },
                    "maxListings": {
                        "title": "Max companies (hard cap across all modes)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard ceiling on companies returned across the whole run, regardless of mode (search / url / sitemap). 0 = unlimited (only bounded by Apify's per-run timeout). This is the authoritative budget cap, applied AFTER per-search pagination.",
                        "default": 25
                    },
                    "maxReviewsPerCompany": {
                        "title": "Max review threads per company",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on review threads (each thread can also include replies) returned per company. 0 = unlimited.",
                        "default": 50
                    },
                    "minRating": {
                        "title": "Minimum company rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Skip companies whose aggregate rating is below this threshold (0-5). Applied client-side.",
                        "default": 0
                    },
                    "minReviewCount": {
                        "title": "Minimum review count",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip companies with fewer than N total reviews.",
                        "default": 0
                    },
                    "ratedOnly": {
                        "title": "Only companies with at least one rated review",
                        "type": "boolean",
                        "description": "Skip companies whose JSON-LD aggregate rating count is zero (i.e., no scored reviews on file).",
                        "default": false
                    },
                    "verifiedOnly": {
                        "title": "Only verified companies",
                        "type": "boolean",
                        "description": "Skip companies marked as unverified (status flag from the Nuxt payload).",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "GoWork uses an upstream edge filter that prefers residential connections. Apify Residential FR (default) or DE lifts it naturally for most pages. Datacenter is rejected."
                    }
                }
            },
            "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
