# Shopify Variant Price Feed & SKU Matcher (`produkdigitalali/shopify-variant-price-feed`) Actor

Export selected Shopify product variants with exact buyer SKU matching, raw prices, currency provenance and availability. Flat rows for price-comparison feeds.

- **URL**: https://apify.com/produkdigitalali/shopify-variant-price-feed.md
- **Developed by:** [ProdukDigitalAli](https://apify.com/produkdigitalali) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 variant exporteds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Shopify Variant Price Feed & SKU Matcher

Export flat variant rows from selected public Shopify product URLs. Match your own item codes using exact variant IDs, retain merchant SKU/barcode when exposed, and record price/currency provenance. Intended for buyer-maintained price-comparison lists and catalog pipelines.

### Quick start

Use examples/basic.json or multi-store.json. Each product entry contains url and optional buyerSkuByVariantId. Canonical HTTPS product paths may include one locale prefix. Remove query strings. Maximum10 products and1000 stored variants/run. No store search or full-catalog discovery.

### Data contract

One row per unique store/product/variant key per run. IDs are strings; unsafe numeric IDs fail that product. buyerSku is your exact mapping; it never replaces the source merchantSku. PriceRaw is the Shopify Ajax numeric price; moneyScale100 and priceAmount=priceRaw/100 are explicit Shopify scale, not a general ISO minor-unit converter. No exchange-rate conversion. Currency is read using the same origin and locale cart.js in an anonymous request; it can be null and is not a checkout quote. Customer/session-specific and geo prices may differ. Raw values are always retained. Missing availability is null; no inventory counts, sales or revenue estimates. Returned250-variant arrays are marked potentially truncated. Unmatched mappings appear in OUTPUT.

### Limits and errors

Only public HTTPS port443. All DNS answers and every redirect are checked, connections pin a validated IP and preserve TLS verification. Cross-origin redirects fail; supply the canonical host. No tokens, cookies, proxies, browser code, cart writes, login or private networks. Up to3 same-origin redirect hops/request,4MiB/response,15s product request,10s currency request,120s work deadline; responses cannot execute JavaScript even if MIME is text/javascript. Requests are serial; a500ms pause follows successful products. Budget/partial/failure status appears in OUTPUT. A failed product does not create billable rows. All-failed runs fail instead of claiming success. URL paths and public product text are not guaranteed free of personal data; do not submit secrets.

### Storage and billing

Dataset rows are persisted before variant-exported. Configured PPE: USD0.001 per stored variant (USD1/1000 variants), distinct from competitor per-product prices that include all variants. One bounded owner acceptance run stored1variant and reconciled1variant-exported event with OUTPUT.charged1. This test is not evidence of external customers. The Store pricing table is authoritative. No charge for failures or duplicate stable keys. Store/billing are not a cross-service transaction: a charging or storage failure stops the run, and previously stored rows may remain. Automatic rerun can duplicate data across runs. No cross-run state/change alerts or resume.

### Compatibility

Uses the documented Shopify Ajax product endpoint, not the Admin API. Headless/restricted/feed-disabled/anti-bot stores can fail. Shopify is not affiliated with this Actor. Public accessibility does not guarantee every store or variant can be exported.

# Changelog

This Actor's version history is a separate document: https://apify.com/produkdigitalali/shopify-variant-price-feed/changelog.md

# Actor input Schema

## `products` (type: `array`):

1–10 canonical HTTPS product URLs. Optional buyerSkuByVariantId maps exact variant IDs to your item codes. No cookies, tokens, query strings, login or full catalog discovery.

## Actor input object example

```json
{
  "products": [
    {
      "url": "https://www.deathwishcoffee.com/products/chaos-and-coffee-pet-tag-set",
      "buyerSkuByVariantId": {
        "42397658284087": "MY-COFFEE-ACCESSORY"
      }
    }
  ]
}
```

# Actor output Schema

## `variants` (type: `string`):

No description

## `summary` (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 = {
    "products": [
        {
            "url": "https://www.deathwishcoffee.com/products/chaos-and-coffee-pet-tag-set",
            "buyerSkuByVariantId": {
                "42397658284087": "MY-COFFEE-ACCESSORY"
            }
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("produkdigitalali/shopify-variant-price-feed").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 = { "products": [{
            "url": "https://www.deathwishcoffee.com/products/chaos-and-coffee-pet-tag-set",
            "buyerSkuByVariantId": { "42397658284087": "MY-COFFEE-ACCESSORY" },
        }] }

# Run the Actor and wait for it to finish
run = client.actor("produkdigitalali/shopify-variant-price-feed").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 '{
  "products": [
    {
      "url": "https://www.deathwishcoffee.com/products/chaos-and-coffee-pet-tag-set",
      "buyerSkuByVariantId": {
        "42397658284087": "MY-COFFEE-ACCESSORY"
      }
    }
  ]
}' |
apify call produkdigitalali/shopify-variant-price-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,produkdigitalali/shopify-variant-price-feed"
        }
    }
}
```

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/hJDmMrsthrag7Pjjb/builds/5MiVFxw1WlrrGEDsG/openapi.json
