# GoCar.be Car Scraper (`smtc/gocar-be-car-scraper`) Actor

Actor that scrapes gocar.be car listings from a search URL and returns normalized JSON records.

- **URL**: https://apify.com/smtc/gocar-be-car-scraper.md
- **Developed by:** [Arthur Fleck](https://apify.com/smtc) (community)
- **Categories:** Agents, E-commerce
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

## GoCar.be Car Listings Scraper

### Overview

GoCar.be Car Listings Scraper collects structured data from vehicle listings on GoCar.be. It is built for automotive search pages and turns filtered GoCar.be car results into clean, usable records for research, monitoring, analytics, and internal data workflows.

The actor starts from a normal GoCar.be search URL, opens the rendered GoCar interface in Chromium, captures GoCar's own native search responses, mutates browser-native search requests with the URL-derived filters and offsets, paginates through available result batches, and emits one structured record per listing.

For large result sets, the actor can automatically partition broad year ranges such as `first_registration_year=2021:2026`. This avoids GoCar's observed native search result-window limit of about 1000 hits by collecting smaller year-specific result sets and deduping the combined output.

The results are saved to an Apify dataset and can be exported in formats such as JSON, JSONL, CSV, Excel, XML, or accessed directly through the Apify API.

The Apify actor target is:

```txt
smtc/gocar-be-car-scraper
````

### What information does the scraper collect?

The actor can collect fields such as:

Vehicle title and version\
Listing ID\
Listing URL\
Brand and model\
Description\
Condition\
Price and discount details\
VAT deductibility\
Seller or dealer name\
Seller or dealer city\
Seller type\
Images\
Body style\
Mileage\
First registration year\
Fuel type\
Gearbox\
Transmission\
Power in hp and kW\
CO2 emissions\
Emission class\
Color\
Number of doors and seats\
Warranty months\
Vehicle options and equipment\
Publication and sync timestamps\
Optional raw source data

### Common use cases

This scraper is useful for anyone who needs reliable Belgian used-car market data. You can use it to:

Monitor vehicle prices on GoCar.be\
Track available inventory by brand, model, mileage, year, fuel type, or dealer type\
Analyze professional dealer activity\
Build used-car pricing datasets\
Compare supply trends over time\
Feed automotive dashboards or valuation tools\
Support sourcing, trade-in, and resale decisions\
Create market intelligence reports for the Belgian car market

### Input

The actor accepts a filtered GoCar.be car search URL and processes listings from that result set.

```json
{
  "startUrl": "https://gocar.be/en/search/u_used-cars?kilometers=5000%3A125000&first_registration_year=2021%3A2026&price=5000%3A&vehicle_type=car&gbrands=BMW&point_of_sale_type=Professional&is_leasing=false&condition=second+hand",
  "searchResultMode": "native-ui",
  "nativeSearchEntryUrl": "https://gocar.be/en",
  "maxListings": 2300,
  "maxPages": 500,
  "nativeSearchPaginationPages": 500,
  "nativeSearchPartitioning": true,
  "nativeSearchPartitionThreshold": 950,
  "nativeSearchMaxPartitions": 25,
  "includeContactFields": false,
  "includeImages": true,
  "includeRaw": false,
  "useApifyProxy": true,
  "apifyProxyGroups": ["RESIDENTIAL"],
  "apifyProxyCountryCode": "BE",
  "apifyProxySession": "BE",
  "requestDelayMs": 500,
  "headless": true,
  "navigationTimeoutSecs": 45,
  "nativeSearchEntryWaitUntil": "commit",
  "nativeSearchEntryTimeoutSecs": 45,
  "challengeWaitSecs": 30
}
```

This example uses a bounded year range, `first_registration_year=2021:2026`, so the actor can partition the 2246-result query into year batches. An open-ended value such as `first_registration_year=2021:` is valid as a search filter, but it does not currently give the actor enough information to create exact-year partitions automatically.

### Input fields

`startUrl`
Required. A GoCar.be search-results URL, including any selected filters.

`searchResultMode`
Recommended value: `native-ui`. This mode opens GoCar in Chromium, applies filters in the rendered UI, captures the site's own search responses, and avoids direct server-side API calls.

`nativeSearchEntryUrl`
Entry page used for native UI response capture. Default is derived from `startUrl`, for example `https://gocar.be/en`.

`maxListings`
Maximum number of listings to push to the dataset. Default: `300`.

`nativeSearchPaginationPages`
Maximum native search result pages to collect in `native-ui` mode, including the first filtered response. Default: `100`. The actor may raise the effective page count to satisfy `maxListings` or the search response's estimated total, up to the hard cap.

`nativeSearchPartitioning`
Automatically splits large native result sets into smaller range partitions when the result count is likely to hit GoCar's search backend window. Default: `true`.

`nativeSearchPartitionThreshold`
Estimated result count at which partitioning is enabled. Default: `950`.

`nativeSearchMaxPartitions`
Maximum number of automatic partitions for one run. Current automatic partitioning supports `first_registration_year` ranges. Default: `25`.

`nativeSearchEntryWaitUntil`
Navigation readiness setting for the neutral native-search entry page. Default: `commit`.

`nativeSearchEntryTimeoutSecs`
Navigation timeout for the neutral native-search entry page. Timeout on this page is tolerated in `native-ui` mode if the page is partially loaded. Default: `45`.

`includeContactFields`
Includes contact-related fields when available and permitted. Default: `false`.

`includeImages`
Includes listing image URLs in the output. Default: `true`.

`includeRaw`
Adds raw source payloads for debugging or advanced processing. Default: `false`.

`useApifyProxy`
Uses Apify Proxy when the actor runs on Apify and proxy credentials are available. Default: `true`.

`apifyProxyGroups`
Optional Apify Proxy groups. Default: `["RESIDENTIAL"]`.

`apifyProxyCountryCode`
Optional proxy country code. Default: `BE`.

`proxyUrl`
Optional explicit Chromium proxy URL. This overrides Apify Proxy settings.

`requestDelayMs`
Delay between listing requests or detail-page actions. Default: `500`.

`headless`
Runs Chromium in headless mode. For GoCar cloud runs, `false` can be more transparent during diagnostics. Default: `false`.

### Output

Each dataset item represents one vehicle listing.

```json
{
  "source": "gocar",
  "scrapedAt": "2026-05-20T10:00:00.000Z",
  "id": 5124396,
  "vehicle_id": 5124396,
  "url": "https://gocar.be/en/cars/bmw/1-series/120-120i-m-sport-automaat-leder/id/5124396",
  "brand_name": "BMW",
  "model_name": "1 Series",
  "version": "120 120i M Sport Automaat Leder",
  "description": "Vehicle description...",
  "condition": "second hand",
  "body_style": "Hatchback",
  "gearbox": "Automatic",
  "fuel_type": "Petrol",
  "main_color": "Black",
  "first_registration_year": 2022,
  "kilometers": 44566,
  "horse_power": 184,
  "engine_power_kw": 135,
  "CO2_emissions": 131,
  "price": {
    "formatted": "EUR 28,950",
    "amount": 28950,
    "vat_deductible": true
  },
  "cover": "https://storage-04.gocarcdn.com/vehicles/example.jpg",
  "images": [
    "https://storage-04.gocarcdn.com/vehicles/example.jpg"
  ],
  "point_of_sale_name": "Dealer name",
  "point_of_sale_city": "Brussels",
  "point_of_sale_type": "Professional",
  "vehicle_options_list": [
    "Navigation",
    "Parking sensors",
    "Heated seats"
  ],
  "published_at": "2026-05-19T08:00:00Z"
}
```

The actor also defines Apify output metadata in `.actor/output_schema.json` and
a dataset field/view schema in `.actor/dataset_schema.json`, so Apify Console and
API consumers can discover the default dataset output and preview the listing
records in structured table views.

### Notes

This actor is focused on car listings from GoCar.be search-result pages.

GoCar currently protects direct detail URLs and non-native API calls more aggressively than the rendered home/search UI. The recommended mode is therefore `searchResultMode: "native-ui"`, which lets the GoCar frontend establish a valid browser session, then captures and mutates successful browser-native search responses.

Observed production behavior:

- Plain direct HTTP calls to `gocar.be` and `search.gocar.be` are challenged.
- The rendered GoCar page can make successful native `https://search.gocar.be/multi-search` requests.
- One native response returns up to 51 hits in the observed InstantSearch flow.
- GoCar's backend result window appears to cap broad queries at about 1000 available hits.
- Broad year-range queries are partitioned by `first_registration_year` to collect beyond that 1000-hit window.
- A short final page, for example fewer than 51 hits, now stops that partition immediately.

For larger cloud runs, enable Apify Proxy with a residential Belgian proxy group if available. The actor includes diagnostic controls for troubleshooting Cloudflare/security verification pages.

Contact fields are excluded by default. Enable them only when they are needed for your use case and when your usage complies with applicable rules.

Please make sure your use of the data follows the GoCar.be terms of service, your permission scope, and relevant data protection regulations.

Technical implementation notes, diagnostics, and deployment commands are documented in [implementation.md](/Users/barth/git/auto-finder-datalake/actors/gocar/docs/implementation.md).

### Custom Development and Support

SMTC is a software development company specializing in web platforms, data extraction, and analytics applications. We help teams turn marketplace data into practical tools, from custom Apify actors and API integrations to dashboards, reporting workflows, and internal business applications.

If you need a tailored scraper, additional data fields, automation, or integration with your existing systems, contact us with your requirements. We can help design, build, and maintain a solution that fits your project.

# Actor input Schema

## `startUrl` (type: `string`):

A GoCar search results URL.

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

Maximum number of listings to process.

## `includeContactFields` (type: `boolean`):

Include seller contact fields when present and permitted.

## `includeImages` (type: `boolean`):

Include listing image URLs in output.

## `includeRaw` (type: `boolean`):

Include source payloads for debugging.

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

Maximum number of search result pages to inspect.

## `requestDelayMs` (type: `integer`):

Delay between listing requests.

## `headless` (type: `boolean`):

Run Chromium in headless mode.

## `scrollPasses` (type: `integer`):

Number of scroll passes per search page to trigger lazy-loaded results.

## `navigationTimeoutSecs` (type: `integer`):

Timeout for page navigations.

## `useApifyProxy` (type: `boolean`):

Use Apify Proxy when the actor runs on Apify and APIFY\_PROXY\_PASSWORD is available.

## `useInternalSearchApi` (type: `boolean`):

Reserved phase-2 mode. When implemented, call search.gocar.be/multi-search from the verified browser context.

## `searchResultMode` (type: `string`):

Choose whether to scrape detail pages or capture GoCar's native rendered search responses.

## `nativeSearchEntryUrl` (type: `string`):

Entry page used for native UI response capture. Defaults to the language home page derived from startUrl, for example https://gocar.be/en.

## `nativeSearchSourceUrl` (type: `string`):

Optional URL whose query parameters are converted to UI filter clicks while nativeSearchEntryUrl is used for the initial page load.

## `nativeSearchPaginationPages` (type: `integer`):

Maximum native search pages to collect in native-ui mode, including the first filtered response. Native mode may raise the effective page count up to the estimated total when maxListings is higher.

## `nativeSearchPartitioning` (type: `boolean`):

Automatically split large native search result sets into smaller range partitions when the GoCar search backend result window is likely to cap pagination.

## `nativeSearchPartitionThreshold` (type: `integer`):

Estimated result count at which native-ui mode enables partitioning. GoCar's observed search window is about 1000 hits, so the default leaves margin.

## `nativeSearchMaxPartitions` (type: `integer`):

Maximum number of range partitions to create for one run. Current automatic partitioning supports first\_registration\_year ranges.

## `nativeSearchReadyTimeoutSecs` (type: `integer`):

Maximum time for targeted native search diagnostics to wait until widgets and native search responses are ready.

## `nativeSearchEntryWaitUntil` (type: `string`):

Playwright page.goto waitUntil setting used only for the neutral native-search entry page. The default returns as soon as the main document is committed.

## `nativeSearchEntryTimeoutSecs` (type: `integer`):

Navigation timeout used only for the neutral native-search entry page. Timeout on this entry page is tolerated in native-ui mode if the page is partially loaded.

## `listingCardSelector` (type: `string`):

Rendered search-result card selector.

## `loadMoreSelector` (type: `string`):

Rendered InstantSearch load-more button selector.

## `clickSpecTabs` (type: `boolean`):

Click known detail-page specification tabs before parsing.

## `detailNavigationMode` (type: `string`):

Open detail pages directly by URL or by clicking links from the rendered search page.

## `diagnosticOnly` (type: `boolean`):

Open diagnostic URLs through the configured browser/proxy and exit without scraping listings.

## `skipAccessDiagnostics` (type: `boolean`):

In diagnostic-only mode, skip generic access URLs and run only the selected targeted diagnostics.

## `internalSearchDiagnostic` (type: `boolean`):

In diagnostic-only mode, open startUrl first and attempt search.gocar.be/multi-search from that verified browser context.

## `nativeSearchStateDiagnostic` (type: `boolean`):

In diagnostic-only mode, open the native entry page, apply URL-derived filters, capture native search responses, and inspect in-page search state.

## `internalSearchLimit` (type: `integer`):

Number of hits to request in the browser-context internal search diagnostic.

## `internalSearchSourceUrl` (type: `string`):

Optional GoCar search URL whose filters are converted to the browser-context internal search payload while startUrl is used as the page entry point.

## `internalSearchDisableDefaultFilter` (type: `boolean`):

Diagnostic switch: omit the default point\_of\_sale\_master filter from the browser-context internal search payload.

## `internalSearchMinimalPayload` (type: `boolean`):

Diagnostic switch: send only index, facets, limit, and offset to mimic the first native GoCar InstantSearch request.

## `internalSearchOffset` (type: `integer`):

Offset to request in the browser-context internal search diagnostic.

## `diagnosticUrls` (type: `array`):

URLs to open in diagnostic-only mode.

## `apifyProxyGroups` (type: `array`):

Optional Apify Proxy groups, for example RESIDENTIAL if enabled on the account.

## `apifyProxySession` (type: `string`):

Optional sticky Apify Proxy session identifier. Applied only when a proxy group is selected.

## `apifyProxyCountryCode` (type: `string`):

Optional proxy country code, for example BE, NL, FR, DE, or US.

## `proxyUrl` (type: `string`):

Optional explicit proxy URL for Chromium. Overrides Apify Proxy settings.

## `logDiagnostics` (type: `boolean`):

Log rendered page title, URL, link count, and text preview for troubleshooting Cloudflare or selector issues.

## `saveDiagnostics` (type: `boolean`):

Save HTML and screenshot snapshots to the default key-value store after navigation or failure.

## `waitUntil` (type: `string`):

Playwright page.goto waitUntil setting.

## `challengeWaitSecs` (type: `integer`):

Extra time to wait for browser security verification pages to complete before failing.

## Actor input object example

```json
{
  "startUrl": "https://gocar.be/en/search/u_used-cars?kilometers=5000%3A125000&first_registration_year=2021%3A2026&price=5000%3A&vehicle_type=car&gbrands=BMW&point_of_sale_type=Professional&is_leasing=false&condition=second+hand",
  "maxListings": 300,
  "includeContactFields": false,
  "includeImages": false,
  "includeRaw": false,
  "maxPages": 100,
  "requestDelayMs": 500,
  "headless": true,
  "scrollPasses": 5,
  "navigationTimeoutSecs": 45,
  "useApifyProxy": true,
  "useInternalSearchApi": false,
  "searchResultMode": "native-ui",
  "nativeSearchPaginationPages": 100,
  "nativeSearchPartitioning": true,
  "nativeSearchPartitionThreshold": 950,
  "nativeSearchMaxPartitions": 25,
  "nativeSearchReadyTimeoutSecs": 45,
  "nativeSearchEntryWaitUntil": "commit",
  "nativeSearchEntryTimeoutSecs": 45,
  "listingCardSelector": ".vehicle-item",
  "loadMoreSelector": "button.ais-InfiniteHits-loadMore",
  "clickSpecTabs": true,
  "detailNavigationMode": "direct",
  "diagnosticOnly": false,
  "skipAccessDiagnostics": false,
  "internalSearchDiagnostic": false,
  "nativeSearchStateDiagnostic": false,
  "internalSearchLimit": 51,
  "internalSearchDisableDefaultFilter": false,
  "internalSearchMinimalPayload": false,
  "internalSearchOffset": 0,
  "diagnosticUrls": [
    "http://proxy.apify.com",
    "https://api.apify.com/v2/browser-info",
    "https://www.gocar.be/robots.txt",
    "https://search.gocar.be/multi-search"
  ],
  "apifyProxyGroups": [
    "RESIDENTIAL"
  ],
  "apifyProxySession": "BE",
  "logDiagnostics": false,
  "saveDiagnostics": false,
  "waitUntil": "domcontentloaded",
  "challengeWaitSecs": 30
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items containing normalized GoCar vehicle listing records.

# 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 = {
    "startUrl": "https://gocar.be/en/search/u_used-cars?kilometers=5000%3A125000&first_registration_year=2021%3A2026&price=5000%3A&vehicle_type=car&gbrands=BMW&point_of_sale_type=Professional&is_leasing=false&condition=second+hand"
};

// Run the Actor and wait for it to finish
const run = await client.actor("smtc/gocar-be-car-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 = { "startUrl": "https://gocar.be/en/search/u_used-cars?kilometers=5000%3A125000&first_registration_year=2021%3A2026&price=5000%3A&vehicle_type=car&gbrands=BMW&point_of_sale_type=Professional&is_leasing=false&condition=second+hand" }

# Run the Actor and wait for it to finish
run = client.actor("smtc/gocar-be-car-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 '{
  "startUrl": "https://gocar.be/en/search/u_used-cars?kilometers=5000%3A125000&first_registration_year=2021%3A2026&price=5000%3A&vehicle_type=car&gbrands=BMW&point_of_sale_type=Professional&is_leasing=false&condition=second+hand"
}' |
apify call smtc/gocar-be-car-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GoCar.be Car Scraper",
        "description": "Actor that scrapes gocar.be car listings from a search URL and returns normalized JSON records.",
        "version": "0.1",
        "x-build-id": "3PeCsZg89tNfYPCkJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/smtc~gocar-be-car-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-smtc-gocar-be-car-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/smtc~gocar-be-car-scraper/runs": {
            "post": {
                "operationId": "runs-sync-smtc-gocar-be-car-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/smtc~gocar-be-car-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-smtc-gocar-be-car-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": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "A GoCar search results URL."
                    },
                    "maxListings": {
                        "title": "Max listings",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of listings to process.",
                        "default": 300
                    },
                    "includeContactFields": {
                        "title": "Include contact fields",
                        "type": "boolean",
                        "description": "Include seller contact fields when present and permitted.",
                        "default": false
                    },
                    "includeImages": {
                        "title": "Include images",
                        "type": "boolean",
                        "description": "Include listing image URLs in output.",
                        "default": false
                    },
                    "includeRaw": {
                        "title": "Include raw payloads",
                        "type": "boolean",
                        "description": "Include source payloads for debugging.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Max search pages",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of search result pages to inspect.",
                        "default": 100
                    },
                    "requestDelayMs": {
                        "title": "Request delay ms",
                        "minimum": 0,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Delay between listing requests.",
                        "default": 500
                    },
                    "headless": {
                        "title": "Headless browser",
                        "type": "boolean",
                        "description": "Run Chromium in headless mode.",
                        "default": true
                    },
                    "scrollPasses": {
                        "title": "Search scroll passes",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of scroll passes per search page to trigger lazy-loaded results.",
                        "default": 5
                    },
                    "navigationTimeoutSecs": {
                        "title": "Navigation timeout seconds",
                        "minimum": 10,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Timeout for page navigations.",
                        "default": 45
                    },
                    "useApifyProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Use Apify Proxy when the actor runs on Apify and APIFY_PROXY_PASSWORD is available.",
                        "default": true
                    },
                    "useInternalSearchApi": {
                        "title": "Use internal search API",
                        "type": "boolean",
                        "description": "Reserved phase-2 mode. When implemented, call search.gocar.be/multi-search from the verified browser context.",
                        "default": false
                    },
                    "searchResultMode": {
                        "title": "Search result mode",
                        "enum": [
                            "detail-pages",
                            "native-ui"
                        ],
                        "type": "string",
                        "description": "Choose whether to scrape detail pages or capture GoCar's native rendered search responses.",
                        "default": "native-ui"
                    },
                    "nativeSearchEntryUrl": {
                        "title": "Native search entry URL",
                        "type": "string",
                        "description": "Entry page used for native UI response capture. Defaults to the language home page derived from startUrl, for example https://gocar.be/en."
                    },
                    "nativeSearchSourceUrl": {
                        "title": "Native search source URL",
                        "type": "string",
                        "description": "Optional URL whose query parameters are converted to UI filter clicks while nativeSearchEntryUrl is used for the initial page load."
                    },
                    "nativeSearchPaginationPages": {
                        "title": "Native search pagination pages",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum native search pages to collect in native-ui mode, including the first filtered response. Native mode may raise the effective page count up to the estimated total when maxListings is higher.",
                        "default": 100
                    },
                    "nativeSearchPartitioning": {
                        "title": "Native search partitioning",
                        "type": "boolean",
                        "description": "Automatically split large native search result sets into smaller range partitions when the GoCar search backend result window is likely to cap pagination.",
                        "default": true
                    },
                    "nativeSearchPartitionThreshold": {
                        "title": "Native search partition threshold",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Estimated result count at which native-ui mode enables partitioning. GoCar's observed search window is about 1000 hits, so the default leaves margin.",
                        "default": 950
                    },
                    "nativeSearchMaxPartitions": {
                        "title": "Native search max partitions",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of range partitions to create for one run. Current automatic partitioning supports first_registration_year ranges.",
                        "default": 25
                    },
                    "nativeSearchReadyTimeoutSecs": {
                        "title": "Native search ready timeout seconds",
                        "minimum": 5,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Maximum time for targeted native search diagnostics to wait until widgets and native search responses are ready.",
                        "default": 45
                    },
                    "nativeSearchEntryWaitUntil": {
                        "title": "Native search entry wait until",
                        "enum": [
                            "domcontentloaded",
                            "load",
                            "commit"
                        ],
                        "type": "string",
                        "description": "Playwright page.goto waitUntil setting used only for the neutral native-search entry page. The default returns as soon as the main document is committed.",
                        "default": "commit"
                    },
                    "nativeSearchEntryTimeoutSecs": {
                        "title": "Native search entry timeout seconds",
                        "minimum": 10,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Navigation timeout used only for the neutral native-search entry page. Timeout on this entry page is tolerated in native-ui mode if the page is partially loaded.",
                        "default": 45
                    },
                    "listingCardSelector": {
                        "title": "Listing card selector",
                        "type": "string",
                        "description": "Rendered search-result card selector.",
                        "default": ".vehicle-item"
                    },
                    "loadMoreSelector": {
                        "title": "Load more selector",
                        "type": "string",
                        "description": "Rendered InstantSearch load-more button selector.",
                        "default": "button.ais-InfiniteHits-loadMore"
                    },
                    "clickSpecTabs": {
                        "title": "Click spec tabs",
                        "type": "boolean",
                        "description": "Click known detail-page specification tabs before parsing.",
                        "default": true
                    },
                    "detailNavigationMode": {
                        "title": "Detail navigation mode",
                        "enum": [
                            "direct",
                            "click"
                        ],
                        "type": "string",
                        "description": "Open detail pages directly by URL or by clicking links from the rendered search page.",
                        "default": "direct"
                    },
                    "diagnosticOnly": {
                        "title": "Diagnostic only",
                        "type": "boolean",
                        "description": "Open diagnostic URLs through the configured browser/proxy and exit without scraping listings.",
                        "default": false
                    },
                    "skipAccessDiagnostics": {
                        "title": "Skip access diagnostics",
                        "type": "boolean",
                        "description": "In diagnostic-only mode, skip generic access URLs and run only the selected targeted diagnostics.",
                        "default": false
                    },
                    "internalSearchDiagnostic": {
                        "title": "Internal search diagnostic",
                        "type": "boolean",
                        "description": "In diagnostic-only mode, open startUrl first and attempt search.gocar.be/multi-search from that verified browser context.",
                        "default": false
                    },
                    "nativeSearchStateDiagnostic": {
                        "title": "Native search state diagnostic",
                        "type": "boolean",
                        "description": "In diagnostic-only mode, open the native entry page, apply URL-derived filters, capture native search responses, and inspect in-page search state.",
                        "default": false
                    },
                    "internalSearchLimit": {
                        "title": "Internal search limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Number of hits to request in the browser-context internal search diagnostic.",
                        "default": 51
                    },
                    "internalSearchSourceUrl": {
                        "title": "Internal search source URL",
                        "type": "string",
                        "description": "Optional GoCar search URL whose filters are converted to the browser-context internal search payload while startUrl is used as the page entry point."
                    },
                    "internalSearchDisableDefaultFilter": {
                        "title": "Disable default internal search filter",
                        "type": "boolean",
                        "description": "Diagnostic switch: omit the default point_of_sale_master filter from the browser-context internal search payload.",
                        "default": false
                    },
                    "internalSearchMinimalPayload": {
                        "title": "Minimal internal search payload",
                        "type": "boolean",
                        "description": "Diagnostic switch: send only index, facets, limit, and offset to mimic the first native GoCar InstantSearch request.",
                        "default": false
                    },
                    "internalSearchOffset": {
                        "title": "Internal search offset",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Offset to request in the browser-context internal search diagnostic.",
                        "default": 0
                    },
                    "diagnosticUrls": {
                        "title": "Diagnostic URLs",
                        "type": "array",
                        "description": "URLs to open in diagnostic-only mode.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "http://proxy.apify.com",
                            "https://api.apify.com/v2/browser-info",
                            "https://www.gocar.be/robots.txt",
                            "https://search.gocar.be/multi-search"
                        ]
                    },
                    "apifyProxyGroups": {
                        "title": "Apify Proxy groups",
                        "type": "array",
                        "description": "Optional Apify Proxy groups, for example RESIDENTIAL if enabled on the account.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "RESIDENTIAL"
                        ]
                    },
                    "apifyProxySession": {
                        "title": "Apify Proxy session",
                        "type": "string",
                        "description": "Optional sticky Apify Proxy session identifier. Applied only when a proxy group is selected.",
                        "default": "BE"
                    },
                    "apifyProxyCountryCode": {
                        "title": "Apify Proxy country code",
                        "type": "string",
                        "description": "Optional proxy country code, for example BE, NL, FR, DE, or US."
                    },
                    "proxyUrl": {
                        "title": "Proxy URL",
                        "type": "string",
                        "description": "Optional explicit proxy URL for Chromium. Overrides Apify Proxy settings."
                    },
                    "logDiagnostics": {
                        "title": "Log diagnostics",
                        "type": "boolean",
                        "description": "Log rendered page title, URL, link count, and text preview for troubleshooting Cloudflare or selector issues.",
                        "default": false
                    },
                    "saveDiagnostics": {
                        "title": "Save diagnostics",
                        "type": "boolean",
                        "description": "Save HTML and screenshot snapshots to the default key-value store after navigation or failure.",
                        "default": false
                    },
                    "waitUntil": {
                        "title": "Navigation wait until",
                        "enum": [
                            "domcontentloaded",
                            "load",
                            "commit"
                        ],
                        "type": "string",
                        "description": "Playwright page.goto waitUntil setting.",
                        "default": "domcontentloaded"
                    },
                    "challengeWaitSecs": {
                        "title": "Challenge wait seconds",
                        "minimum": 0,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Extra time to wait for browser security verification pages to complete before failing.",
                        "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
