# WLW Germany Supplier Directory Scraper (`automation-lab/wlw-de-supplier-directory-scraper`) Actor

Extract WLW Germany supplier leads, product URLs, company IDs, badges, contact availability, and ranks from public search results.

- **URL**: https://apify.com/automation-lab/wlw-de-supplier-directory-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## WLW Germany Supplier Directory Scraper

Extract supplier lead data from WLW Germany search result pages.

The actor collects company names, WLW profile URLs, product or service titles, product URLs, URL IDs, visible selling points, badges, contact availability, pagination position, and the source search URL. It is built for regional B2B lead generation, supplier discovery, sourcing research, and market mapping.

### What It Does

WLW is a German-language supplier directory used for B2B sourcing.

This actor turns public WLW search result pages into structured dataset rows.

It starts from one or more search terms or direct WLW result URLs.

It follows pagination up to your configured page limit.

It saves each supplier product card as one result.

It deduplicates repeated product or company profile URLs.

### Why use it

WLW result pages are useful for supplier discovery, but they are not shaped for repeatable lead export.

This actor gives you structured rows with company names, profile URLs, product titles, ranking positions, badges, and source URLs.

Use it when you need a reproducible supplier list instead of manually copying results from the WLW website.

It is especially useful for German-language B2B categories where search visibility, product wording, and supplier type signals matter.

### How to scrape WLW supplier data

1. Open the actor page on the Apify Store.
2. Click **Try for free** or **Run**.
3. Enter a `searchQuery`, such as `maschinenbau`, or paste one or more WLW result URLs into `startUrls`.
4. Set `maxResults` and `maxPagesPerSearch` to match the size of export you need.
5. Keep the country and supplier type filters empty unless you want to narrow WLW's public result URL.
6. Run the actor and wait for the dataset to finish.
7. Export the results as JSON, CSV, Excel, or through the Apify API.

### Typical Use Cases

Build supplier prospect lists for German industrial categories.

Map companies selling a specific product or service.

Collect WLW profile URLs for manual qualification.

Monitor which suppliers appear for important B2B keywords.

Compare companies visible across several related searches.

Prepare regional lead lists for sales, sourcing, or procurement workflows.

### Who Is It For

Sales teams can use it to find companies active in a target industrial category.

Procurement teams can use it to discover alternate suppliers in Germany, Austria, or Switzerland.

Market researchers can use it to compare supplier visibility across product keywords.

Data teams can use it to feed WLW profile URLs into enrichment and qualification pipelines.

Agencies can use it to build lead lists for regional B2B campaigns.

### Input parameters

You can run the actor with a single search query.

You can add multiple search queries.

You can provide direct WLW result URLs.

You can limit the maximum number of saved results.

You can limit how many result pages are followed for each source.

You can set optional WLW public URL filters for country and supplier type.

You can configure retries and proxy settings.

### Search Query

Use `searchQuery` for the main keyword.

Example values:

- `maschinenbau`
- `cnc fertigung`
- `kunststoffteile`
- `sondermaschinenbau`
- `metallverarbeitung`

### Multiple Queries

Use `searchQueries` when you want to scrape several WLW searches in one run.

Each query becomes its own WLW product search URL.

The global `maxResults` limit still applies across all queries.

### Start URLs

Use `startUrls` when you already have a WLW search or products URL.

Supported examples:

- `https://www.wlw.de/de/suche?q=maschinenbau`
- `https://www.wlw.de/de/products?isPserpFirst=1&q=maschinenbau`
- `https://www.wlw.de/de/products/page/2?isPserpFirst=1&q=maschinenbau`

### Country Filter

WLW exposes country filters through URL parameters.

Known public codes from the tested page data:

- `40` for Germany
- `275` for Austria
- `401` for Switzerland

Leave the field empty if you do not want a country filter.

### Supplier Type Filter

WLW exposes supplier type filters through URL parameters.

Useful values may include:

- `production`
- `distribution`
- `service`
- `wholesaler`
- `customerSpecificManufacturing`

Leave the field empty if you do not want this filter.

### Result Limits

`maxResults` controls the maximum number of saved rows.

`maxPagesPerSearch` controls pagination depth per query or start URL.

For tests, keep both values low.

For production exports, increase `maxResults` and `maxPagesPerSearch` together.

### Output Fields

Each dataset item represents one visible WLW supplier product card.

The actor saves these fields:

- `search_url`
- `query`
- `page_number`
- `position_on_page`
- `rank`
- `company_name`
- `profile_url`
- `company_id`
- `product_title`
- `product_url`
- `product_id`
- `product_description`
- `sell_points`
- `supplier_types`
- `badges`
- `contact_available`
- `source_type`
- `scraped_at`

### Example Output

```json
{
  "search_url": "https://www.wlw.de/de/suche?q=maschinenbau",
  "query": "maschinenbau",
  "page_number": 1,
  "position_on_page": 1,
  "rank": 1,
  "company_name": "D + E GmbH",
  "profile_url": "https://www.wlw.de/de/firma/d-e-gmbh-1606813",
  "company_id": "1606813",
  "product_title": "CNC-Fertigung / Drehen",
  "product_url": "https://www.wlw.de/de/firma/d-e-gmbh-1606813/produkte/cnc-fertigung-drehen-30378",
  "product_id": "30378",
  "sell_points": [
    "Spezialist für klein/mittlere Serien",
    "Meisterhaftes CNC-Drehen komplexer Teile"
  ],
  "contact_available": true,
  "source_type": "searchQuery",
  "scraped_at": "2026-05-15T12:51:57.296Z"
}
````

### Company Fields

`company_name` is the visible supplier name from the card.

`profile_url` is the WLW company profile URL.

`company_id` is parsed from the profile URL when present.

These fields are useful for deduplication and follow-up enrichment.

### Product Fields

`product_title` is the visible product or service title.

`product_url` is the WLW product detail URL.

`product_id` is parsed from the product URL when present.

`product_description` is the short card text when WLW exposes it.

`sell_points` contains bullet-style value points visible on the card.

### Badge Fields

WLW cards may show verification, ranking, or response badges.

The actor stores visible labels in `badges`.

`contact_available` is true when the result card exposes the WLW contact button.

### Pagination Fields

`page_number` is the result page within the current source.

`position_on_page` is the card position on that page.

`rank` is the running rank within the run after previous saved rows.

These fields help preserve search ordering.

### Source Fields

`search_url` is the exact page URL fetched for the result.

`query` is the keyword when the source came from a query or a URL with `q`.

`source_type` is `searchQuery` or `startUrl`.

`scraped_at` is an ISO timestamp.

### How much does it cost to scrape WLW supplier data?

This actor uses pay-per-event pricing.

The formula-derived BRONZE result event is priced at `$0.000039195` per saved result.

That equals about `$0.039 per 1,000 results` before account-tier discounts.

A small run-start event is charged separately.

Current result event prices by Apify account tier:

- FREE: `$0.000045075` per result
- BRONZE: `$0.000039195` per result
- SILVER: `$0.000030572` per result
- GOLD: `$0.000023517` per result
- PLATINUM: `$0.000015678` per result
- DIAMOND: `$0.000010975` per result

For example, 1,000 extracted rows cost about `$0.039` on BRONZE before the run-start fee.

The actual run charge depends on how many result rows are saved.

### Performance

The actor uses HTTP requests and Cheerio parsing.

It does not launch a browser.

It is designed to run with 256 MB memory for normal search jobs.

The dynamic memory setting can scale to 512 MB for larger inputs.

### Proxy Use

The tested WLW search page was directly fetchable as SSR HTML.

Proxy settings are still available for reliability.

If WLW returns anti-bot responses from your environment, enable Apify Proxy.

Residential proxy is the conservative default in the input prefill.

### Data Freshness

The actor fetches live WLW pages during each run.

Results may change as WLW changes ranking, availability, or supplier profiles.

Use the `scraped_at` field to track when each row was collected.

### Limitations

The first version focuses on public search result cards.

It does not open each company profile page.

Full postal addresses and external websites are not always exposed on the public result card, so they are not guaranteed fields in version 0.1.

WLW may change its frontend markup or anti-bot behavior.

### Recommended Test Run

```json
{
  "searchQuery": "maschinenbau",
  "maxResults": 30,
  "maxPagesPerSearch": 1
}
```

### Larger Export Example

```json
{
  "searchQueries": ["maschinenbau", "cnc fertigung", "sondermaschinenbau"],
  "countryCode": "40",
  "maxResults": 500,
  "maxPagesPerSearch": 10
}
```

### Direct URL Example

```json
{
  "startUrls": [
    { "url": "https://www.wlw.de/de/suche?q=maschinenbau" }
  ],
  "maxResults": 100,
  "maxPagesPerSearch": 3
}
```

### Tips

Start with `maxResults` between 20 and 50 when testing a new keyword.

Use German search terms for best WLW coverage.

Use `startUrls` when your browser already shows the exact WLW result page you want to scrape.

Keep unrelated markets in separate runs so exports are easier to review.

Increase `maxPagesPerSearch` only after confirming that the first page returns relevant supplier cards.

If WLW returns no results for a valid keyword, try the direct `/de/products` URL form or enable proxy settings.

### Export Formats

You can export the default dataset as JSON.

You can export it as CSV.

You can export it as Excel.

You can fetch rows through the Apify API.

### API Usage

You can run this actor through the Apify API after deployment.

Node.js example:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/wlw-de-supplier-directory-scraper').call({
  searchQuery: 'maschinenbau',
  maxResults: 20,
  maxPagesPerSearch: 1
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python example:

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/wlw-de-supplier-directory-scraper").call(
    run_input={
        "searchQuery": "maschinenbau",
        "maxResults": 20,
        "maxPagesPerSearch": 1,
    }
)

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

cURL example:

```bash
curl "https://api.apify.com/v2/acts/automation-lab~wlw-de-supplier-directory-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"maschinenbau","maxResults":20,"maxPagesPerSearch":1}'
```

### Integrations

You can connect the WLW Germany Supplier Directory Scraper to other systems through the Apify API, webhooks, integrations, and Apify MCP.

Common workflow patterns:

- Save WLW supplier rows to Google Sheets or Airtable for lead review.
- Send completed dataset exports to a CRM enrichment pipeline.
- Trigger a webhook when a sourcing run finishes.
- Run recurring keyword checks from an Apify schedule.
- Use Apify MCP from an AI client to run focused supplier searches and summarize the dataset.

Apify MCP HTTP setup:

```bash
claude mcp add --transport http apify-wlw-suppliers "https://mcp.apify.com?tools=automation-lab/wlw-de-supplier-directory-scraper"
```

Claude Desktop, Cursor, or VS Code MCP JSON configuration:

```json
{
  "mcpServers": {
    "apify-wlw-suppliers": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/wlw-de-supplier-directory-scraper"
    }
  }
}
```

For agent use, run the actor with a small `maxResults` value first, inspect the dataset, then increase limits for the final export.

Example prompts:

- "Run the WLW Germany Supplier Directory Scraper for `maschinenbau` with 20 results and summarize the top suppliers."
- "Find WLW suppliers for `cnc fertigung` in Germany and return company names, profile URLs, and product titles."
- "Scrape 100 WLW supplier product cards for `kunststoffteile`, then group the results by repeated company profile URL."

### Related scrapers

Other automation-lab actors that can support supplier discovery and B2B lead workflows:

- [Made-in-China Suppliers Scraper](https://apify.com/automation-lab/madeinchina-suppliers-scraper)
- [ExportersIndia Suppliers Scraper](https://apify.com/automation-lab/exportersindia-suppliers-scraper)
- [IQS Directory Industrial Supplier Scraper](https://apify.com/automation-lab/iqsdirectory-industrial-supplier-scraper)
- [Thomasnet Scraper](https://apify.com/automation-lab/thomasnet-scraper)
- [Website Contact Finder](https://apify.com/automation-lab/website-contact-finder)

### Legality

The actor extracts data from publicly accessible WLW result pages.

You are responsible for using the output in accordance with applicable laws, WLW terms, and privacy obligations.

Avoid using scraped business contact data for unsolicited outreach that violates local rules.

Store only the data you need for your legitimate workflow.

### FAQ

Can it scrape company profile pages?

Version 0.1 focuses on search result cards and does not open every profile page.

Does it require a browser?

No. The tested WLW product search pages render usable HTML in the initial response.

Why are some address or website fields missing?

Those fields are not consistently visible on public result cards, so this actor does not invent or infer them.

Can I filter to Germany only?

Yes. Use `countryCode` value `40`, or leave the field empty to use WLW's default result set.

Why did my keyword return no items?

The keyword may route to a different WLW result type, return no public product cards, or trigger anti-bot handling. Try a direct `/de/products` start URL or enable proxy settings.

### Quality Notes

The scraper reads server-rendered WLW HTML.

It uses stable `data-test` selectors where available.

It deduplicates rows by product URL and profile URL.

It throws an error if no rows are extracted.

### Operational Notes

Keep test inputs small while validating a keyword.

Increase limits only after confirming the keyword returns relevant suppliers.

Use separate runs for unrelated market segments when you want clean exports.

### Support

If a run returns no items for a keyword that works in your browser, check whether WLW changed the public URL structure or returned an anti-bot page.

The run log includes fetched URLs and warnings for pages where no product cards were found.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword to search on WLW, for example maschinenbau, cnc fertigung, or kunststoffteile.

## `searchQueries` (type: `array`):

Additional WLW search terms to scrape.

## `startUrls` (type: `array`):

Direct WLW search or products result URLs to scrape.

## `countryCode` (type: `string`):

Optional WLW country code filter. Germany is 40, Austria is 275, Switzerland is 401.

## `supplierType` (type: `string`):

Optional WLW supplier type code, such as production, distribution, service, wholesaler, or customerSpecificManufacturing.

## `maxResults` (type: `integer`):

Maximum number of supplier product results to save.

## `maxPagesPerSearch` (type: `integer`):

Maximum number of WLW result pages to follow for each search source.

## `maxRequestRetries` (type: `integer`):

Number of retry attempts for failed WLW requests.

## `proxyConfiguration` (type: `object`):

Proxy settings for WLW requests.

## Actor input object example

```json
{
  "searchQuery": "maschinenbau",
  "searchQueries": [
    "maschinenbau",
    "cnc fertigung"
  ],
  "startUrls": [
    {
      "url": "https://www.wlw.de/de/suche?q=maschinenbau"
    }
  ],
  "countryCode": "40",
  "maxResults": 20,
  "maxPagesPerSearch": 1,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "maschinenbau",
    "searchQueries": [
        "maschinenbau",
        "cnc fertigung"
    ],
    "startUrls": [
        {
            "url": "https://www.wlw.de/de/suche?q=maschinenbau"
        }
    ],
    "countryCode": "40",
    "supplierType": "",
    "maxResults": 20,
    "maxPagesPerSearch": 1,
    "maxRequestRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/wlw-de-supplier-directory-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 = {
    "searchQuery": "maschinenbau",
    "searchQueries": [
        "maschinenbau",
        "cnc fertigung",
    ],
    "startUrls": [{ "url": "https://www.wlw.de/de/suche?q=maschinenbau" }],
    "countryCode": "40",
    "supplierType": "",
    "maxResults": 20,
    "maxPagesPerSearch": 1,
    "maxRequestRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/wlw-de-supplier-directory-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 '{
  "searchQuery": "maschinenbau",
  "searchQueries": [
    "maschinenbau",
    "cnc fertigung"
  ],
  "startUrls": [
    {
      "url": "https://www.wlw.de/de/suche?q=maschinenbau"
    }
  ],
  "countryCode": "40",
  "supplierType": "",
  "maxResults": 20,
  "maxPagesPerSearch": 1,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automation-lab/wlw-de-supplier-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/wlw-de-supplier-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WLW Germany Supplier Directory Scraper",
        "description": "Extract WLW Germany supplier leads, product URLs, company IDs, badges, contact availability, and ranks from public search results.",
        "version": "0.1",
        "x-build-id": "fJlLO7PQDEtuVlIKn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~wlw-de-supplier-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-wlw-de-supplier-directory-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/automation-lab~wlw-de-supplier-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-wlw-de-supplier-directory-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/automation-lab~wlw-de-supplier-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-wlw-de-supplier-directory-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",
                "properties": {
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword to search on WLW, for example maschinenbau, cnc fertigung, or kunststoffteile.",
                        "default": "maschinenbau"
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Additional WLW search terms to scrape.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct WLW search or products result URLs to scrape.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "countryCode": {
                        "title": "Country code filter",
                        "type": "string",
                        "description": "Optional WLW country code filter. Germany is 40, Austria is 275, Switzerland is 401."
                    },
                    "supplierType": {
                        "title": "Supplier type filter",
                        "type": "string",
                        "description": "Optional WLW supplier type code, such as production, distribution, service, wholesaler, or customerSpecificManufacturing."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of supplier product results to save.",
                        "default": 20
                    },
                    "maxPagesPerSearch": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of WLW result pages to follow for each search source.",
                        "default": 3
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retry attempts for failed WLW requests.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for WLW requests."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
