# Auto Pricing Engine for Shopify & Amazon (`unlimiteddots/auto-pricing-engine-shopify-amazon`) Actor

This actor is a multi-currency pricing engine designed for e-commerce businesses.

A powerful multi-currency pricing engine for Shopify and Amazon sellers. Convert prices using FX rates, apply margins, enforce minimum price floors, and optimize pricing automatically across markets.

- **URL**: https://apify.com/unlimiteddots/auto-pricing-engine-shopify-amazon.md
- **Developed by:** [Unlimited Dots](https://apify.com/unlimiteddots) (community)
- **Categories:** E-commerce, Other, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 api requests

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

## Auto Pricing Engine for Shopify and Amazon

Turn multi-currency pricing into an automated growth system.

This actor helps e-commerce brands protect margin, keep local prices consistent, and scale globally without manual spreadsheet work. It is built for teams that need reliable price automation for Shopify and Amazon catalogs.

Free tier includes up to 10 pricing operations per request.
Shopify sync is billed separately as a premium feature.

### Why Customers Use It

- Protect profit with configurable margin and minimum price rules
- Launch pricing to new countries in minutes
- Standardize local price endings such as 0.99 across markets
- Run safe dry runs before live updates
- Process full catalogs in bulk

### Who It Is For

- Shopify and Amazon sellers
- E-commerce operators and growth teams
- Pricing and merchandising managers
- Agencies running international storefronts

### Endpoint Guide

All endpoints are available from the actor web server.

#### GET /health

Returns service status so you can verify uptime in monitoring and automation flows.

#### GET /symbols

Returns available currency symbols used for market expansion planning.

#### GET /latest

Returns latest rates for real-time pricing workflows.

Supported query parameters: base, symbols, places, amount, callback.

#### GET /:date

Returns historical rates for a specific day in YYYY-MM-DD format.

Supported query parameters: base, symbols, places, amount, callback.

#### GET /timeseries

Returns rate trends across a date range for pricing analysis and strategy checks.

Supported query parameters: start_date, end_date, base, symbols, places, amount, callback.

#### GET /convert

Converts one amount from one currency to another.

Supported query parameters: from, to, amount, places, callback.

#### GET /fluctuation

Returns rate movement between two dates for volatility-aware pricing decisions.

Supported query parameters: start_date, end_date, base, symbols, places, amount, callback.

#### POST /validate-rules

Validates pricing_rules before production rollout.

Returns structured errors and warnings for margin, rounding, and price floor settings.

#### POST /preview-price

Computes optimized prices for a single source price and one or more target currencies.

Best for merchandising checks before campaign launches.

#### POST /bulk-convert

Processes product arrays in one request and returns optimized target prices for each item.

Optional webhook mode can deliver the computed payload directly to downstream systems.

#### POST /shopify-sync

Computes new prices and optionally updates Shopify variant prices.

Supports both:

- dry_run mode for simulation
- live mode for publishing updates

### GET Request Examples

Use these commands against your actor endpoint.

#### GET /health

```bash
curl "http://localhost:8090/health"
````

#### GET /symbols

```bash
curl "http://localhost:8090/symbols"
```

#### GET /latest

```bash
curl "http://localhost:8090/latest?base=EUR&symbols=USD,GBP,CZK&amount=1&places=2"
```

#### GET /:date

```bash
curl "http://localhost:8090/2026-04-16?base=EUR&symbols=USD,GBP&amount=1&places=2"
```

#### GET /timeseries

```bash
curl "http://localhost:8090/timeseries?start_date=2026-04-01&end_date=2026-04-16&base=EUR&symbols=USD,GBP"
```

#### GET /convert

```bash
curl "http://localhost:8090/convert?from=EUR&to=USD&amount=100&places=2"
```

#### GET /fluctuation

```bash
curl "http://localhost:8090/fluctuation?start_date=2026-04-01&end_date=2026-04-16&base=EUR&symbols=USD,GBP"
```

### Production Run URL Examples (Apify)

Use these URLs to run the actor directly in production from Apify.

Replace:

- YOUR\_USERNAME with your Apify username
- ACTOR\_NAME with this actor name
- YOUR\_API\_TOKEN with your Apify API token

#### Run with default input

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~ACTOR_NAME/runs?token=YOUR_API_TOKEN"
```

#### Run /latest style scenario

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~ACTOR_NAME/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "latest",
    "base": "EUR",
    "symbols": "USD,GBP,CZK",
    "amount": 1,
    "places": 2
  }'
```

#### Run /bulk-convert pricing automation

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~ACTOR_NAME/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "bulk-convert",
    "base": "EUR",
    "targets": ["USD", "GBP", "CZK"],
    "pricing_rules": {
      "margin_percent": 2,
      "rounding_rules": {
        "USD": { "type": "0.99" },
        "GBP": { "type": "psychological" },
        "CZK": { "type": "whole" }
      },
      "price_floor": {
        "enabled": true,
        "values": {
          "EUR": 36,
          "USD": 40,
          "GBP": 32
        },
        "fallback": "base"
      }
    },
    "products": [
      { "id": "p1", "price": 10 },
      { "id": "p2", "price": 50 }
    ]
  }'
```

#### Run /shopify-sync in dry\_run mode

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~ACTOR_NAME/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "shopify-sync",
    "mode": "dry_run",
    "base": "USD",
    "currency": "EUR",
    "products": [
      { "shopify_product_id": 1234567890, "variant_id": 9876543210, "price": 29.99 }
    ],
    "pricing_rules": {
      "margin_percent": 5,
      "rounding_rules": {
        "EUR": { "type": "0.99" }
      }
    }
  }'
```

### Business Rules You Can Apply

- margin\_percent for profit protection
- rounding\_rules with 0.99, psychological, and whole strategies
- price\_floor for minimum price enforcement by currency

### Typical Workflows

1. Validate pricing rules with POST /validate-rules.
2. Check one SKU with POST /preview-price.
3. Process full catalog with POST /bulk-convert.
4. Push updates to Shopify with POST /shopify-sync in live mode.

### Example Request Bodies

#### POST /bulk-convert

```json
{
  "base": "EUR",
  "targets": ["USD", "GBP", "CZK"],
  "pricing_rules": {
    "margin_percent": 2,
    "rounding_rules": {
      "USD": { "type": "0.99" },
      "GBP": { "type": "psychological" },
      "CZK": { "type": "whole" }
    },
    "price_floor": {
      "enabled": true,
      "values": {
        "EUR": 36,
        "USD": 40,
        "GBP": 32
      },
      "fallback": "base"
    }
  },
  "products": [
    { "id": "p1", "price": 10 },
    { "id": "p2", "price": 50 }
  ]
}
```

#### POST /preview-price

```json
{
  "base": "USD",
  "targets": ["EUR", "GBP"],
  "price": 49,
  "pricing_rules": {
    "margin_percent": 5,
    "rounding_rules": {
      "EUR": { "type": "0.99" },
      "GBP": { "type": "psychological" }
    }
  }
}
```

#### POST /validate-rules

```json
{
  "pricing_rules": {
    "margin_percent": 3,
    "rounding_rules": {
      "USD": { "type": "0.99" },
      "GBP": { "type": "invalid_type" }
    },
    "price_floor": {
      "enabled": true,
      "values": { "USD": 10, "GBP": 8 },
      "fallback": "base"
    }
  }
}
```

#### POST /shopify-sync

```json
{
  "shopify": {
    "shop_domain": "your-store.myshopify.com",
    "access_token": "shpat_xxxxxxxxxxxx"
  },
  "mode": "dry_run",
  "base": "USD",
  "currency": "EUR",
  "products": [
    { "shopify_product_id": 1234567890, "variant_id": 9876543210, "price": 29.99 }
  ],
  "pricing_rules": {
    "margin_percent": 5,
    "rounding_rules": {
      "EUR": { "type": "0.99" }
    }
  }
}
```

# Actor input Schema

## `endpoint` (type: `string`):

Select which API endpoint behavior to run with this input.

## `serveApi` (type: `boolean`):

When enabled, the actor starts an HTTP server and waits for requests instead of executing a single endpoint and exiting.

## `requestTimeoutMs` (type: `integer`):

Maximum wait time for upstream and webhook calls.

## `disableCharging` (type: `boolean`):

When enabled, Actor.charge calls are skipped for local testing.

## `date` (type: `string`):

Date in YYYY-MM-DD format for GET /:date queries.

## `base` (type: `string`):

Base currency used for price calculations and market expansion scenarios.

## `symbols` (type: `string`):

Comma-separated currency list (for latest/date/timeseries/fluctuation).

## `places` (type: `integer`):

Optional output precision for supported upstream endpoints.

## `amount` (type: `number`):

Amount used by latest/date/timeseries/convert/fluctuation endpoints.

## `callback` (type: `string`):

Optional callback parameter for upstream-compatible requests.

## `start_date` (type: `string`):

Start date in YYYY-MM-DD format (timeseries/fluctuation).

## `end_date` (type: `string`):

End date in YYYY-MM-DD format (timeseries/fluctuation).

## `from` (type: `string`):

Source currency for GET /convert.

## `to` (type: `string`):

Destination currency for GET /convert.

## `target` (type: `string`):

Single destination currency for preview/bulk flows.

## `targets` (type: `array`):

Destination currencies for international pricing rollout.

## `price` (type: `number`):

Source price used by POST /preview-price.

## `currency` (type: `string`):

Target currency for POST /shopify-sync.

## `mode` (type: `string`):

Choose dry\_run to simulate or live to publish updates.

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

Product items for bulk-convert/shopify-sync payloads.

## `pricing_rules` (type: `object`):

Business rules to protect profit and standardize localized price presentation.

## `webhook_url` (type: `string`):

Optional callback URL to receive computed POST /bulk-convert payloads.

## `shopify` (type: `object`):

Shopify store settings used by POST /shopify-sync live mode.

## `shopifyApiVersion` (type: `string`):

Shopify Admin API version for live catalog price updates.

## Actor input object example

```json
{
  "endpoint": "bulk-convert",
  "serveApi": false,
  "requestTimeoutMs": 30000,
  "disableCharging": false,
  "date": "2026-04-16",
  "base": "EUR",
  "symbols": "USD,GBP",
  "places": 2,
  "amount": 1,
  "targets": [
    "USD",
    "GBP"
  ],
  "price": 49,
  "currency": "EUR",
  "mode": "dry_run",
  "products": [
    {
      "id": "p1",
      "price": 10,
      "shopify_product_id": 1234567890,
      "variant_id": 9876543210
    }
  ],
  "pricing_rules": {
    "margin_percent": 5,
    "rounding_rules": {
      "USD": {
        "type": "0.99"
      }
    },
    "price_floor": {
      "enabled": true,
      "values": {
        "USD": 20
      },
      "fallback": "base"
    }
  },
  "shopify": {
    "shop_domain": "your-store.myshopify.com",
    "access_token": ""
  },
  "shopifyApiVersion": "2026-01"
}
```

# Actor output Schema

## `endpoint` (type: `string`):

Endpoint that produced the response.

## `success` (type: `string`):

Operation status flag when present in endpoint response.

## `statusCode` (type: `string`):

HTTP status code returned by the endpoint.

## `ok` (type: `string`):

Health endpoint status.

## `provider` (type: `string`):

Upstream provider URL used by the actor.

## `valid` (type: `string`):

Pricing rules validation result.

## `errors` (type: `string`):

Validation or processing errors.

## `warnings` (type: `string`):

Non-fatal pricing warnings.

## `id` (type: `string`):

Identifier for preview or product item.

## `prices` (type: `string`):

Computed prices keyed by target currency.

## `metadata` (type: `string`):

Bulk conversion metadata including input, pricing rules, and FX rates.

## `products` (type: `string`):

Converted products or Shopify product input items.

## `delivered` (type: `string`):

Webhook delivery status for bulk-convert webhook mode.

## `status` (type: `string`):

Webhook delivery HTTP status code.

## `mode` (type: `string`):

Shopify sync mode.

## `updated` (type: `string`):

Number of successful Shopify updates.

## `failed` (type: `string`):

Number of failed Shopify updates.

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

Per-variant Shopify sync results.

## `rates` (type: `string`):

Upstream rates object for FX endpoints.

## `date` (type: `string`):

Date in YYYY-MM-DD format.

## `timestamp` (type: `string`):

Response timestamp from provider or actor metadata.

## `query` (type: `string`):

Echoed query payload from upstream endpoints.

## `info` (type: `string`):

Upstream informational block when available.

## `motd` (type: `string`):

Provider message block when available.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("unlimiteddots/auto-pricing-engine-shopify-amazon").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("unlimiteddots/auto-pricing-engine-shopify-amazon").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 '{}' |
apify call unlimiteddots/auto-pricing-engine-shopify-amazon --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unlimiteddots/auto-pricing-engine-shopify-amazon",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Auto Pricing Engine for Shopify & Amazon",
        "description": "This actor is a multi-currency pricing engine designed for e-commerce businesses.\n\nA powerful multi-currency pricing engine for Shopify and Amazon sellers. Convert prices using FX rates, apply margins, enforce minimum price floors, and optimize pricing automatically across markets.",
        "version": "1.0",
        "x-build-id": "58nVrHVinTh8QGW95"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unlimiteddots~auto-pricing-engine-shopify-amazon/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unlimiteddots-auto-pricing-engine-shopify-amazon",
                "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/unlimiteddots~auto-pricing-engine-shopify-amazon/runs": {
            "post": {
                "operationId": "runs-sync-unlimiteddots-auto-pricing-engine-shopify-amazon",
                "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/unlimiteddots~auto-pricing-engine-shopify-amazon/run-sync": {
            "post": {
                "operationId": "run-sync-unlimiteddots-auto-pricing-engine-shopify-amazon",
                "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": {
                    "endpoint": {
                        "title": "Endpoint to execute",
                        "enum": [
                            "health",
                            "symbols",
                            "latest",
                            "date",
                            "timeseries",
                            "convert",
                            "fluctuation",
                            "validate-rules",
                            "preview-price",
                            "bulk-convert",
                            "shopify-sync"
                        ],
                        "type": "string",
                        "description": "Select which API endpoint behavior to run with this input.",
                        "default": "bulk-convert"
                    },
                    "serveApi": {
                        "title": "Run as API server",
                        "type": "boolean",
                        "description": "When enabled, the actor starts an HTTP server and waits for requests instead of executing a single endpoint and exiting.",
                        "default": false
                    },
                    "requestTimeoutMs": {
                        "title": "Network timeout (ms)",
                        "type": "integer",
                        "description": "Maximum wait time for upstream and webhook calls.",
                        "default": 30000
                    },
                    "disableCharging": {
                        "title": "Disable charging (local dev)",
                        "type": "boolean",
                        "description": "When enabled, Actor.charge calls are skipped for local testing.",
                        "default": false
                    },
                    "date": {
                        "title": "Date for /:date endpoint",
                        "type": "string",
                        "description": "Date in YYYY-MM-DD format for GET /:date queries.",
                        "default": "2026-04-16"
                    },
                    "base": {
                        "title": "Base currency (default EUR)",
                        "type": "string",
                        "description": "Base currency used for price calculations and market expansion scenarios.",
                        "default": "EUR"
                    },
                    "symbols": {
                        "title": "Symbols filter",
                        "type": "string",
                        "description": "Comma-separated currency list (for latest/date/timeseries/fluctuation).",
                        "default": "USD,GBP"
                    },
                    "places": {
                        "title": "Decimal places",
                        "type": "integer",
                        "description": "Optional output precision for supported upstream endpoints.",
                        "default": 2
                    },
                    "amount": {
                        "title": "Amount",
                        "type": "number",
                        "description": "Amount used by latest/date/timeseries/convert/fluctuation endpoints.",
                        "default": 1
                    },
                    "callback": {
                        "title": "JSONP callback",
                        "type": "string",
                        "description": "Optional callback parameter for upstream-compatible requests."
                    },
                    "start_date": {
                        "title": "Start date",
                        "type": "string",
                        "description": "Start date in YYYY-MM-DD format (timeseries/fluctuation)."
                    },
                    "end_date": {
                        "title": "End date",
                        "type": "string",
                        "description": "End date in YYYY-MM-DD format (timeseries/fluctuation)."
                    },
                    "from": {
                        "title": "From currency",
                        "type": "string",
                        "description": "Source currency for GET /convert."
                    },
                    "to": {
                        "title": "To currency",
                        "type": "string",
                        "description": "Destination currency for GET /convert."
                    },
                    "target": {
                        "title": "Single target currency",
                        "type": "string",
                        "description": "Single destination currency for preview/bulk flows."
                    },
                    "targets": {
                        "title": "Target market currencies",
                        "type": "array",
                        "description": "Destination currencies for international pricing rollout.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "USD",
                            "GBP"
                        ]
                    },
                    "price": {
                        "title": "Single product price",
                        "type": "number",
                        "description": "Source price used by POST /preview-price.",
                        "default": 49
                    },
                    "currency": {
                        "title": "Shop currency",
                        "type": "string",
                        "description": "Target currency for POST /shopify-sync.",
                        "default": "EUR"
                    },
                    "mode": {
                        "title": "Shopify sync mode",
                        "enum": [
                            "dry_run",
                            "live"
                        ],
                        "type": "string",
                        "description": "Choose dry_run to simulate or live to publish updates.",
                        "default": "dry_run"
                    },
                    "products": {
                        "title": "Products list",
                        "type": "array",
                        "description": "Product items for bulk-convert/shopify-sync payloads.",
                        "items": {
                            "type": "object"
                        },
                        "default": [
                            {
                                "id": "p1",
                                "price": 10,
                                "shopify_product_id": 1234567890,
                                "variant_id": 9876543210
                            }
                        ]
                    },
                    "pricing_rules": {
                        "title": "Pricing optimization rules (margin, rounding, price floor)",
                        "type": "object",
                        "description": "Business rules to protect profit and standardize localized price presentation.",
                        "default": {
                            "margin_percent": 5,
                            "rounding_rules": {
                                "USD": {
                                    "type": "0.99"
                                }
                            },
                            "price_floor": {
                                "enabled": true,
                                "values": {
                                    "USD": 20
                                },
                                "fallback": "base"
                            }
                        }
                    },
                    "webhook_url": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "Optional callback URL to receive computed POST /bulk-convert payloads."
                    },
                    "shopify": {
                        "title": "Shopify credentials",
                        "type": "object",
                        "description": "Shopify store settings used by POST /shopify-sync live mode.",
                        "default": {
                            "shop_domain": "your-store.myshopify.com",
                            "access_token": ""
                        }
                    },
                    "shopifyApiVersion": {
                        "title": "Shopify API Version",
                        "type": "string",
                        "description": "Shopify Admin API version for live catalog price updates.",
                        "default": "2026-01"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
