# NextFlow E-commerce Catalog Quality Auditor (`luis.ramirezsv/nextflow-ecommerce-catalog-auditor`) Actor

Audit Shopify, WooCommerce, and other e-commerce catalogs. Detect missing product data, inconsistencies, duplicate identifiers, and SEO issues, then get an explainable quality score from 0–100.

- **URL**: https://apify.com/luis.ramirezsv/nextflow-ecommerce-catalog-auditor.md
- **Developed by:** [Luis Ramirez](https://apify.com/luis.ramirezsv) (community)
- **Categories:** E-commerce, SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 audited producs

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 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

### Audit e-commerce catalogs before bad product data becomes a sales problem

**NextFlow E-commerce Catalog Quality Auditor** audits public e-commerce product catalogs and turns incomplete, inconsistent, duplicated, or SEO-poor product data into clear, actionable findings.

Enter a store URL, choose how many products to process, and the Actor will discover product pages, extract catalog data, detect Shopify and WooCommerce structures, apply fallback extraction for JavaScript-heavy pages, and generate an explainable **quality score from 0–100**.

#### Main features

- Discover products from **XML sitemaps** and **internal links**
- Deduplicate product URLs before extraction
- Extract product data from **HTML metadata**, **JSON-LD / Schema.org**, and page content
- Dedicated **Shopify** extraction
- Dedicated **WooCommerce** extraction
- Automatic **DOM fallback**
- Automatic **Playwright fallback** for supported JavaScript-heavy pages
- Audit **catalog completeness**
- Detect **duplicate products, SKUs, and identifiers**
- Check **data consistency**
- Audit **SEO and content quality**
- Generate an explainable **catalog quality score from 0–100**
- Produce detailed **errors and warnings**
- Apply retries, timeouts, response limits, and controlled error handling

### How much does it cost?

The Actor uses **Pay per event** pricing.

- **Audited product:** **$0.02 per product**
- **1,000 audited products:** **$20.00**
- **Actor start:** **$0.00005**
- **Platform usage:** included in the price

You only pay for products written to the default dataset, plus the small Actor-start event.

### Input

The only required field is `storeUrl`.

Optional input:

- `maxProducts` — maximum number of products to discover and process
- `auditOptions.checkCompleteness`
- `auditOptions.checkDuplicates`
- `auditOptions.checkConsistency`
- `auditOptions.checkSeo`

Default `maxProducts` is `100`.

#### Input form

![NextFlow E-commerce Catalog Quality Auditor input schema](https://raw.githubusercontent.com/nextflowtechsv/nextflow-ecommerce-catalog-auditor-assets/main/input-schema.png)

#### Basic audit

```json
{
  "storeUrl": "https://example-store.com"
}
```

#### Limited audit

```json
{
  "storeUrl": "https://example-store.com",
  "maxProducts": 25
}
```

#### Shopify audit

No Shopify-specific input is required. The Actor detects compatible Shopify product data automatically.

```json
{
  "storeUrl": "https://your-shopify-store.com",
  "maxProducts": 100,
  "auditOptions": {
    "checkCompleteness": true,
    "checkDuplicates": true,
    "checkConsistency": true,
    "checkSeo": true
  }
}
```

#### WooCommerce audit

No WooCommerce-specific input is required. The Actor detects compatible WooCommerce product data automatically.

```json
{
  "storeUrl": "https://your-woocommerce-store.com",
  "maxProducts": 100,
  "auditOptions": {
    "checkCompleteness": true,
    "checkDuplicates": true,
    "checkConsistency": true,
    "checkSeo": true
  }
}
```

### Successful run example

The Actor can process a public catalog and write the extracted products directly to the default dataset.

![Successful NextFlow catalog audit run](https://raw.githubusercontent.com/nextflowtechsv/nextflow-ecommerce-catalog-auditor-assets/main/successful-run.png)

### Output

The default dataset can contain fields such as:

- `storeUrl`
- `platform`
- `productUrl`
- `name`
- `price`
- `currency`
- `sku`
- `gtin`
- `availability`
- `category`
- `images`
- `description`

Additional data such as product variants and metadata can be extracted when the target store exposes it.

#### Dataset example

![E-commerce catalog dataset results](https://raw.githubusercontent.com/nextflowtechsv/nextflow-ecommerce-catalog-auditor-assets/main/dataset-results.png)

Example dataset item:

```json
{
  "storeUrl": "https://example-store.com",
  "platform": "Shopify",
  "productUrl": "https://example-store.com/products/example-product",
  "name": "Example Product",
  "price": 29.99,
  "currency": "USD",
  "sku": "EXAMPLE-001",
  "gtin": null,
  "availability": "InStock",
  "category": "Example Category",
  "images": [
    "https://example-store.com/example-image.jpg"
  ],
  "description": "Example product description."
}
```

Fields that cannot be extracted reliably are returned as missing values instead of being invented.

### Quality score

After extraction, the Actor runs catalog audit rules and calculates an overall score from **0 to 100**.

The score includes:

- Overall score
- Grade
- Number of processed products
- Total audit rules
- Passed rules
- Failed rules
- Error count
- Warning count

The Actor also generates explainable findings so the score can be traced back to concrete catalog issues.

#### Real audit score example

A real validation run over 5 Shopify products produced a **97/100 — excellent** score.

![Catalog quality score 97 out of 100](https://raw.githubusercontent.com/nextflowtechsv/nextflow-ecommerce-catalog-auditor-assets/main/audit-score.png)

### Audit categories

#### Catalog completeness

Checks whether important product information is missing or incomplete, including:

- Product name
- Price
- Images
- Description
- Identifiers
- Availability

#### Duplicate detection

Detects duplicated catalog information such as repeated products, SKUs, or identifiers when identified by the audit rules.

#### Data consistency

Checks catalog data for inconsistencies involving:

- Prices
- Currency
- Stock information
- Product identifiers

#### SEO and content quality

Reviews product-facing content and SEO-related fields such as:

- Product titles
- Descriptions
- Images
- Product URLs

### Supported platforms

#### Shopify

The Actor can detect Shopify product pages and use Shopify-compatible product endpoints when publicly available.

Shopify processing can include:

- Product information
- Price and currency
- Availability
- Variants
- Variant SKU
- Barcode
- Compare-at price
- Variant options
- Shipping and tax attributes

#### WooCommerce

The Actor can detect WooCommerce product pages and use public WooCommerce Store API data when available.

WooCommerce processing can include:

- Product information
- Price and currency
- Availability
- Variants
- Metadata
- Identifiers
- Additional public catalog fields

#### Other e-commerce websites

The Actor is not limited to Shopify and WooCommerce.

For other public stores, it can use:

1. Base HTML metadata
2. JSON-LD / Schema.org Product data
3. DOM fallback extraction
4. Playwright JavaScript fallback when automatically detected and allowed by the runtime budget

### Product discovery

#### Sitemap discovery

The Actor checks sitemap data and collects product URLs.

#### Internal-link discovery

If sitemap discovery does not reach the requested product limit, the Actor continues by crawling internal links from the same store.

#### Deduplication

URLs found through multiple discovery methods are normalized and deduplicated before extraction.

### Extraction strategy

The extraction pipeline can combine:

1. Base page metadata
2. JSON-LD structured data
3. DOM fallback
4. Shopify-specific extraction
5. WooCommerce-specific extraction
6. Playwright JavaScript fallback

This layered approach improves coverage across stores that expose product catalog data in different ways.

### JavaScript-heavy stores

Some stores render important product information only after JavaScript execution.

The Actor includes an automatic Playwright fallback for detected cases. Browser processing is intentionally limited by runtime budgets to keep runs controlled.

### Key-value store records

The Actor can generate these named records:

- `DISCOVERY_SUMMARY`
- `EXTRACTION_SUMMARY`
- `SHOPIFY_SUMMARY`
- `WOOCOMMERCE_SUMMARY`
- `PLAYWRIGHT_SUMMARY`
- `ROBUSTNESS_SUMMARY`
- `AUDIT_RULES`
- `AUDIT_SCORE`
- `AUDIT_ERRORS`

### Reliability controls

Production safeguards include:

- HTTP retries
- Request timeouts
- Controlled HTTP errors
- Response-size limits
- URL normalization
- Product URL deduplication
- Maximum product limits
- Restricted Playwright usage
- Single-browser concurrency for fallback processing

### Typical use cases

- Audit a catalog before migration
- Find missing product information
- Review catalog quality before an SEO project
- Detect inconsistent product data
- Audit Shopify product quality
- Audit WooCommerce product quality
- Review product identifiers and availability
- Identify products needing content improvements
- Establish a measurable catalog quality baseline
- Re-run audits after catalog cleanup and compare progress

### Important notes

- The Actor audits information publicly accessible from the target store.
- Extraction quality depends on the data exposed by the website.
- Some stores may block automated requests or expose limited product data.
- JavaScript fallback is intentionally limited to keep executions controlled.
- Missing fields are preserved as missing values rather than invented.

### Local development

Requirements:

- Node.js 22+
- TypeScript
- Apify SDK
- Crawlee
- Playwright

Install dependencies:

```bash
npm ci
```

Build:

```bash
npm run build
```

Run:

```bash
npm start
```

### Technology

- Node.js 22+
- TypeScript
- Apify SDK
- Crawlee
- Playwright

Built by **NextFlow**.

# Actor input Schema

## `storeUrl` (type: `string`):

Public URL of the e-commerce store to audit.

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

Maximum number of products to discover and audit.

## `auditOptions` (type: `object`):

Select the catalog quality checks to perform.

## Actor input object example

```json
{
  "storeUrl": "https://printful-demo-store.myshopify.com",
  "maxProducts": 5,
  "auditOptions": {
    "checkCompleteness": true,
    "checkDuplicates": true,
    "checkConsistency": true,
    "checkSeo": true
  }
}
```

# Actor output Schema

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

Complete per-product catalog audit dataset.

# 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 = {
    "storeUrl": "https://printful-demo-store.myshopify.com",
    "maxProducts": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("luis.ramirezsv/nextflow-ecommerce-catalog-auditor").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 = {
    "storeUrl": "https://printful-demo-store.myshopify.com",
    "maxProducts": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("luis.ramirezsv/nextflow-ecommerce-catalog-auditor").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 '{
  "storeUrl": "https://printful-demo-store.myshopify.com",
  "maxProducts": 5
}' |
apify call luis.ramirezsv/nextflow-ecommerce-catalog-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luis.ramirezsv/nextflow-ecommerce-catalog-auditor"
        }
    }
}

```

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/raNGYQJWpDZOChxC9/builds/mLst1PCO0DtfpjAn4/openapi.json
