# Product Catalog Scraper — Shopify CSV, WooCommerce & Shoprenter (`kondasviktor/product-catalog-scraper`) Actor

Use this Actor when you need to extract a public product catalog (eMAG, Allegro, Etsy, Amazon, Shopify, WooCommerce, or Shoprenter storefront) and download Shopify CSV, WooCommerce CSV, Shoprenter CSV, or JSON. Public listings only; output is import files, not the Shopify Catalog API.

- **URL**: https://apify.com/kondasviktor/product-catalog-scraper.md
- **Developed by:** [Viktor Kondas](https://apify.com/kondasviktor) (community)
- **Categories:** AI, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## Product Catalog Scraper — Shopify CSV, WooCommerce & Shoprenter

Extract **public** product listings from supported marketplaces and storefronts. Output is a canonical JSON dataset plus import-ready **Shopify CSV**, **WooCommerce CSV**, and **Shoprenter CSV**. Extra CSV formats are **not** extra PPE charges.

This Actor does **not** call the Shopify Catalog API (MCP). It writes classic Shopify product CSV rows with **draft** status so you can review before going live.

It is **not affiliated with** Shopify, WooCommerce, Shoprenter, Amazon, Allegro, Etsy, Zara, Gucci, Apple, Tesco, or any other named storefront.

### When to use this Actor

Use this when you have a **public product, category, search, shop, or storefront URL** and you need a catalog file you can import into Shopify, WooCommerce, or Shoprenter.

**Supported adapters:** Shopify (`products.json`), WooCommerce Store API, Shoprenter, eMAG, Allegro (including **allegro.hu**), Etsy shops (RSS when shop HTML is blocked), Amazon product **and search** pages, Zara category API, Gucci listings, Apple family pages, Tesco, **Mountex-style** Become/Meilisearch shops, plus a **JSON-LD / Open Graph** fallback for other public catalogs.

**Not every URL will succeed.** Login walls, CAPTCHAs, empty marketing pages, and sites that block datacenter IPs return a warning and skip (or thin data). Enable **Apify Proxy** (residential) for Allegro, Etsy, and similar. Apple family pages often omit price. Amazon search cards sometimes omit price.

Do **not** use this for:

- Private / login-only catalogs
- Inventing SKUs, GTINs, or stock quantities
- Claiming a full catalog when the source did not publish identifiers or prices

### Pricing (PPE)

| Event | When | Price |
| --- | --- | --- |
| Actor start | Platform default | Platform default |
| `catalog-product` | Each successfully saved **parent** product | **$0.005** |

Variants on the same parent do not add extra events. Shopify + Woo + Shoprenter files from the same product are one charge.

### Input

| Field | Notes |
| --- | --- |
| `startUrls` | Product, listing, or storefront URLs |
| `maxProducts` | Parent-product cap (QA prefill: **5**) |
| `maxPages` | Listing pagination cap |
| `includeExports` | `shopifyCsv`, `woocommerceCsv`, `shoprenterCsv` |
| `localeHint` | Optional, e.g. `hu-HU` |
| `proxyConfiguration` | Enable for blocked marketplaces |

Published Store example: [Allbirds storefront — Shopify, WooCommerce & Shoprenter CSV](https://apify.com/kondasviktor/product-catalog-scraper/examples/allbirds-storefront-shopify-woo-shoprenter-csv).

### Output

- **Dataset:** one row per parent product (canonical JSON)
- **Key-value store:**
  - `catalog.json`
  - `shopify-products.csv`
  - `woocommerce-products.csv`
  - `shoprenter-products.csv`
  - `migration-warnings.json`

Shopify rows use **draft** status. Shoprenter CSV includes mandatory **Cikkszám** (SKU when present; otherwise a stable derived code from the source URL — never a random ID).

Identifiers are copied only when the source publishes them: SKU, ASIN, GTIN/EAN/UPC/ISBN, MPN. This Actor never invents ISINs.

Images are **URLs only** (no binary download).

### Legal

Respect each site's terms and robots rules. You are responsible for how you use extracted public data. This is not legal advice.

### Related actors (suite)

All Actors from this developer: [apify.com/kondasviktor](https://apify.com/kondasviktor)

| Actor | Role |
|-------|------|
| [Google Maps CEE Scraper — Supplier Shortlist](https://apify.com/kondasviktor/google-maps-cee-scraper) | Discover local suppliers |
| [Website Intelligence + Contact Extractor](https://apify.com/kondasviktor/website-intelligence-contact-extractor) | Enrich websites (contacts, tech, compliance) |
| [Dealer / Distributor Locator Extractor](https://apify.com/kondasviktor/dealer-distributor-locator) | Expand brand locator pages |
| [PDF Procurement Document Extractor](https://apify.com/kondasviktor/pdf-procurement-document-extractor) | Find certs / reports / datasheets |
| [Website Change Monitor — Diff Tracker](https://apify.com/kondasviktor/website-change-monitor) | Watch pages for changes |
| [European Fuel Station Prices API (CEE + DACH)](https://apify.com/kondasviktor/cee-dach-fuel-intelligence) | CEE + DACH station fuel prices |
| **Product Catalog Scraper — Shopify CSV, WooCommerce & Shoprenter** (this Actor) | Public catalogs → Shopify / Woo / Shoprenter CSV |

Each Actor runs standalone; use them as an optional suite when chaining discovery → enrichment → catalog export → monitoring → fuel intelligence.

### Support

Issues: [vibecoderslife.com](https://vibecoderslife.com) · hello@vibecoderslife.com

# Actor input Schema

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

Product, category, search, shop, or storefront URLs. Supported adapters: eMAG, Allegro (including allegro.hu), Etsy shops, Amazon product and search pages, Shopify, WooCommerce, Shoprenter, Mountex-style Meilisearch shops, Zara, Gucci, Apple product families, Tesco, plus JSON-LD / listing-link fallback. Not every site returns products — enable a proxy if a site blocks datacenter IPs.

## `maxProducts` (type: `integer`):

Maximum parent products to save. QA prefill is 5.

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

Cap on category/search pagination per start URL.

## `includeExports` (type: `array`):

Key-value store files to write. Dataset JSON is always saved. Extra formats are not extra PPE charges.

## `localeHint` (type: `string`):

Optional BCP 47 locale (e.g. hu-HU) when the source URL does not imply one.

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

Use Apify Proxy for marketplaces that block datacenter IPs. Leave off for public storefront JSON when possible.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.allbirds.com"
    }
  ],
  "maxProducts": 5,
  "maxPages": 1,
  "includeExports": [
    "shopifyCsv",
    "woocommerceCsv",
    "shoprenterCsv"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `catalogJson` (type: `string`):

No description

## `shopifyCsv` (type: `string`):

No description

## `woocommerceCsv` (type: `string`):

No description

## `shoprenterCsv` (type: `string`):

No description

## `warnings` (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 = {
    "startUrls": [
        {
            "url": "https://www.allbirds.com"
        }
    ],
    "maxProducts": 5,
    "maxPages": 1,
    "includeExports": [
        "shopifyCsv",
        "woocommerceCsv",
        "shoprenterCsv"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kondasviktor/product-catalog-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 = {
    "startUrls": [{ "url": "https://www.allbirds.com" }],
    "maxProducts": 5,
    "maxPages": 1,
    "includeExports": [
        "shopifyCsv",
        "woocommerceCsv",
        "shoprenterCsv",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("kondasviktor/product-catalog-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.allbirds.com"
    }
  ],
  "maxProducts": 5,
  "maxPages": 1,
  "includeExports": [
    "shopifyCsv",
    "woocommerceCsv",
    "shoprenterCsv"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call kondasviktor/product-catalog-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kondasviktor/product-catalog-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bJTajh6cQK9sLEInh/builds/s6zGsdLGjPWq9bfho/openapi.json
