Every feature, in detail.

SintoData layers AI intelligence on top of a high-throughput sync engine, handling everything from feed ingestion to catalog enrichment — with safety gates at every step.

AI-Powered Intelligence

Seven features powered by DeepSeek v4 Pro.

Every AI feature uses strict structured JSON output (instructor.Mode.JSON) with a zero-temperature configuration for deterministic, repeatable results. Each inference costs fractions of a cent, ensuring 95%+ gross margins at scale. A security guardrail validates every LLM response before it’s trusted — stripping dangerous content, rejecting hallucinated field names, and blocking injection patterns.

All four generative AI features default to automatic mode per feed — writes happen immediately when output is clean, only filling empty fields and never overwriting content the merchant already set. Each feature can be toggled to manual mode per feed, surfacing rows for your review instead of auto-writing them.

AI Column Mapping

Zero-Touch

How it works

On first feed ingestion, our AI reads the first row of your supplier’s file and produces a column mapping from vendor headers to standard fields (sku, inventory_quantity, price, product_title, product_type, size, barcode, product_category). Each mapping comes with a confidence score.

Mapping is cached per feed configuration and reused on every subsequent sync — the LLM is called only once per feed setup, even across thousands of syncs.

Header Drift Remapping

When a supplier changes column names between syncs (e.g., QTYQTY_AVAIL), SintoData detects the mismatch automatically. In flexible mode, the AI suggests a new mapping and holds the sync for your review. In strict mode, any drift on a required field stops the sync immediately. A 1-hour cooldown between auto-remap attempts prevents runaway LLM costs.

Safety: First-time mappings and drift remaps are always held for merchant approval. SintoData never auto-commits a mapping it hasn’t seen before — you review and approve before it touches your catalog.

Attribute Extraction

Zero-Touch

How it works

AI extracts color, size, and material from product titles and writes them as structured Shopify metafields (custom.color, custom.size, custom.material). In automatic mode (the default), in-vocab values are written to your store immediately after each feed sync — no review step.

Vocabulary Guardrail

Extracted values are validated against a hardcoded allow-list vocabulary. Values outside the vocabulary land in a flagged_attributes field and are never auto-written — even in automatic mode, off-vocab values stay flagged and require your review. This prevents AI-generated nonsense from reaching your storefront filters.

Metafield Auto-Creation

SintoData automatically creates the metafield definitions for color, size, and material on first scan — no manual admin steps required. Your Shopify storefront filters and search work out of the box.

Per-feed scoping: Attribute extraction runs per feed, selecting up to 100 products per run. Already-applied and rejected products are skipped; pending and failed rows are re-evaluated.

Product Translation

Zero-Touch

How it works

AI translates your product titles and descriptions into any Shopify Markets locale. In automatic mode (the default), translations are written to Shopify via the native translationsRegister GraphQL mutation after every feed sync — only for locale fields that are currently empty. If you already have a translation (whether you wrote it yourself or paid a translator), it is never overwritten. Translations are keyed by translatableContentDigest to prevent stale overwrites. An HTML-balance guardrail blocks any translation that introduces broken tags, surfacing it for your review instead.

Shopify Markets Integration

Translations ride on Shopify’s Markets infrastructure. Once written, they appear in your admin under the product’s translation interface and serve to shoppers based on their locale. Every translation is unique per product + locale pair — re-running with the same locale updates the existing entry rather than creating duplicates.

Scopes required: Translation is the only AI feature that requires additional OAuth scopes (read_translations, write_translations, read_locales) beyond the standard set — because it writes to a Shopify API surface that no other feature touches.

Category Matching

Zero-Touch

How it works

AI analyzes each product’s title and description, then suggests a Shopify product type. In automatic mode (the default), the product type is written to your store only when the field is empty — it fills what you left blank and never overwrites a product type you already set.

Two guardrails every write passes

  • Gap-fill enforcement: Before writing, SintoData re-reads the product’s current product type from Shopify. If the field already has a value, the write is skipped — the AI never replaces your work.
  • Confidence threshold of 0.5: Suggestions below this threshold are discarded and the row is marked “uncategorized” for manual review. No weak matches make it to your approval queue.

Approval writes one mutation

Approving a match sets the product type via productUpdate. The gap-fill check runs on the approve path too, so even an explicit approval cannot overwrite a product type you already set.

SEO Metadata

Zero-Touch

How it works

AI generates page titles and meta descriptions for every product — the metadata that search engines see, not the product listing text your customers see. Titles target 60 characters, descriptions target 160 characters, optimized for click-through from Google and Bing results. SEO Metadata defaults to automatic mode and only writes to empty seo.title and seo.description fields — if you already have SEO metadata set (manually or via another app), it is never overwritten. Your storefront copy is also never modified.

Never touches your product copy

Unlike rewriting product descriptions — which risks overwriting copy you spent time curating — SEO metadata operates on the search engine listing fields only. Your product title and description on the storefront are never modified. The metadata is written to Shopify’s metafields_global_title_tag and metafields_global_description_tag fields, which only appear in search engine results and browser tabs.

Safety-first: SEO Metadata only writes to empty seo.title and seo.description fields — search engine listing fields that no shopper reads as product copy. If you already have SEO metadata, it is never overwritten. Your curated product title and description on the storefront are never at risk. Shopify clamps over-length values at 70/320 characters server-side, so no metadata is ever rejected for being too long.

Pricing Anomaly Detection

Zero-Touch Deterministic

How it works

A deterministic (non-LLM) safety net that runs inside the standard price-sync path. For every price change, it compares the new price against the last-known price using a ratio-based check: if the new price is more than 3× the old price (or less than 1/3), or the absolute change exceeds $2.00, the price is flagged as anomalous and held back from being written to Shopify.

Per-feed threshold override

Each feed can override the default ratio threshold — if your supplier typically has large price swings, you can raise it. The minimal absolute delta is fixed at $2.00 to avoid flagging penny-rounding noise.

Approve or dismiss

Anomalous prices appear in your Pricing Alerts tab. Approving applies the held-back price exactly as the supplier sent it. Dismissing discards it permanently. The last-known price is never updated on anomaly, so the same suspicious price re-triggers on the next sync — you won’t miss it.

Never generates a price: This feature only decides whether to trust the supplier’s price. It never invents, adjusts, or suggests a price. It’s a gate, not a generator — by design.

Duplicate Product Detection

Read-Only Deterministic

How it works

A daily shop-wide catalog scan using difflib.SequenceMatcher to find likely duplicate product listings based on title similarity. The similarity threshold is calibrated at 0.96 (raised from 0.85 after benchmarking found false positives like “Wireless Mouse” vs “Wireless Mouse Pro” at 0.875).

Pure read-only — zero risk

This feature makes zero Shopify writes, ever. It surfaces candidate duplicate pairs for your review. You fix them yourself in your Shopify admin. The only operations available are “view pending” and “dismiss.” There is no approve button — there’s nothing to write.

Shop-wide scope

Unlike other AI features that operate per feed, duplicate detection scans your entire catalog. Duplicates that span two different supplier feeds are caught. This is a catalog-wide hygiene scan, not a feed-level operation.

Per-Feed AI Control

Granular

Feature-level toggles

Each AI feature can be set to automatic or manual mode per feed. All four generative features — Attribute Extraction, Translation, Category Matching, and SEO Metadata — default to automatic. Want manual review on your main supplier but automatic on a secondary one? Want translation automatic but attribute extraction manual? Configure it per feed, per feature, in the feed setup modal.

Guardrails run in both modes

Automatic mode doesn't mean blind trust. Every guardrail described above — the vocabulary allow-list, HTML-balance check, gap-fill enforcement, and confidence threshold — runs identically in automatic and manual mode. In automatic mode, clean output is written immediately; flagged output is held for your review. In manual mode, everything is held for your review. Switching from manual to automatic never removes a safety check.

Per-feed product attribution

Every AI feature row knows which supplier feed it came from. When you filter pending reviews by feed, you see only the products relevant to that supplier. Automatic scans run per feed after every sync — a feed only touches its own products, never another feed's catalog. Products not yet attributed to a feed are included after that feed's next sync.

Your catalog, your rules

SintoData never creates products from supplier feed data. Unmatched feed SKUs are skipped and reported as errors — no productCreate, no auto-generated listings. And it never writes your primary-language product title or description — the copy your shoppers see in your store's main language is always yours. Every AI write either fills an empty field or writes into a separate namespace (its own metafields, search-engine tags, or a non-primary locale's translation slot).

Feed Source Connectors

Ten ways to connect a supplier feed.

Every connector includes a test-connection endpoint so you can verify credentials before saving. All third-party credentials are encrypted with AES-256-GCM at rest — never stored in plaintext.

HTTP / HTTPS URL

feed_source: url

Pull feeds from any public or authenticated URL. Supports 5 auth types: Bearer Token, API Key (custom header), Basic Auth, and OAuth2 client credentials with automatic token refresh. Conditional requests with ETag and If-Modified-Since reduce bandwidth.

SFTP

feed_source: sftp

Connect to supplier SFTP servers with password or SSH key authentication. Uses paramiko under the hood. Credentials are encrypted at rest. Test-connection endpoint validates host, port, credentials, and file path before saving.

Amazon S3

feed_source: cloud · provider: s3

Pull CSV, XML, or JSON files from any S3-compatible bucket. Requires AWS Access Key, Secret Key, and region — all encrypted at rest. Supports custom endpoints for S3-compatible storage providers.

Google Cloud Storage

feed_source: cloud · provider: gcs

Pull files from GCS buckets using a service account key. The JSON key file is encrypted at rest. Test-connection validates bucket access and object existence before saving.

Azure Blob Storage

feed_source: cloud · provider: azure

Pull files from Azure Blob containers using a connection string (encrypted at rest). Supports any blob in any container with read access from the provided credentials.

Google Drive

feed_source: drive · provider: google

Authorize SintoData to stream files directly from Google Drive via OAuth 2.0 (read-only scope). No credential sharing — you authorize through Google’s consent screen. Streams file contents via the Drive API.

OneDrive

feed_source: drive · provider: onedrive

Authorize SintoData via Microsoft Graph API with Files.Read and offline_access scopes. Streams files directly from OneDrive or SharePoint document libraries. OAuth token encrypted and auto-refreshed.

Google Sheets

feed_source: sheets

Treat a Google Sheet as a live feed. OAuth 2.0 authorization via Google Sheets API. Range-based chunking reads large sheets incrementally, with the first row automatically used as column headers. Ideal for suppliers who maintain a shared spreadsheet.

File Upload

feed_source: upload

Drag-and-drop CSV, XML, or JSON files directly into the SintoData dashboard. The file is base64-encoded and stored in the database. Supports manual ad-hoc syncs and scheduled re-uploads. Ideal for suppliers who email files.

SOAP Web Services

feed_source: soap

Connect to legacy supplier systems via SOAP web services with WS-Security UsernameToken authentication (PasswordText or PasswordDigest). SintoData calls the SOAP endpoint, parses the XML response envelope, and extracts inventory data — bringing pre-REST API suppliers into your automated pipeline.

Sync Engine

High-throughput, segmented, fault-tolerant.

The sync engine is designed for feeds of any size — from 50-SKU boutique catalogs to 500,000-SKU enterprise inventories — with parallel processing, checkpointing, and automatic retry.

Streaming Parsers

CSV, XML, and JSON are all parsed as streams — no full file materialization in memory. A 500,000-row CSV uses the same memory footprint as a 500-row file. XML uses defusedxml.iterparse with element clearing; JSON uses ijson for array-streaming.

Content-Hash Change Detection

SHA-256 is computed incrementally during download. If the hash matches the previous sync, the entire sync is skipped — zero API calls, zero processing time. HTTP feeds also use ETag and If-Modified-Since headers for even earlier bail-out.

Per-SKU Delta Detection

Each SKU’s last-known quantity and price are cached in SupplierSkuState. On each sync, only rows where the quantity or price actually changed trigger a Shopify API call. A 50,000-row feed with 200 changes touches exactly 200 SKUs.

10K-SKU Segments

Feeds are split into 10,000-SKU segments and processed independently via Celery workers. Segments over 1,000 mutations use Shopify’s JSONL bulk mutation endpoint for maximum throughput. Segments under 1,000 use rate-limited API calls (2/sec) with Celery chords for parallelization.

Segment Checkpointing

Each segment’s progress is tracked in supplier_sync_checkpoints. If a worker crashes mid-segment, the next run resumes from the first pending or failed segment — no re-processing of completed segments. A watchdog detects zombie syncs every 10 minutes and gracefully finalizes them.

Per-Feed Scheduling

Each feed has its own schedule: pick specific hours in your timezone for syncs to run. 1 to 4 syncs daily depending on plan. Unconfigured feeds default to 1 sync/day at a hash-distributed minute (deterministic across processes, even after restarts). Syncs are deduplicated per day — a feed never syncs twice on the same calendar day via the scheduler.

Redis Mutex Locks

Every feed dispatch acquires a Redis lock (sync:lock:feed:{config_id}) with a 600-second TTL. No duplicate dispatches, even under high-frequency Beat loops or manual sync-now overlap. Locks auto-expire so a crashed worker never permanently blocks a feed.

Feed Caching

Downloaded feed bytes are saved to disk (/tmp/supplier_feeds/) or an S3 bucket for multi-worker production deployments. In a multi-worker setup, worker A downloads, worker B picks up the cached file — no redundant downloads.

Price Management

Cost-plus pricing with full rounding control.

Pull cost prices from supplier feeds, apply a margin percentage, and round to your preferred retail convention.

Margin Percentage

Set a percentage markup per feed. A margin of 50 on a $10.00 cost price yields a $15.00 retail price. Applied during sync, before rounding. Separate from the feed’s raw price data — the supplier’s cost never reaches your storefront.

Price Behavior

New products only: set the price on first sync, never update it again. Every sync: recalculate and update the price on every run. Choose per feed based on whether your supplier prices are reference costs or final retail.

Rounding Options

Exact

round to $0.01

No rounding applied — price lands exactly where the margin calculation places it. Best for low-margin items where every cent counts.

Nickel

round to $0.05

Rounds to the nearest nickel. A calculated price of $14.93 becomes $14.95.

Dime

round to $0.10

Rounds to the nearest dime. A calculated price of $14.93 becomes $14.90.

Half-Dollar

round to $0.50

Rounds to the nearest half-dollar. A calculated price of $14.93 becomes $15.00.

Charm (.99)

floor + 0.99

Floors to the nearest dollar and adds 99 cents. A calculated price of $14.93 becomes $14.99.

Whole Dollar

round to $1.00

Rounds to the nearest dollar. A calculated price of $14.93 becomes $15.00.

Security & Observability

Production-grade security, visible operations.

Every credential is encrypted, every connection is validated, and every operation is traced. You can see exactly what happened and when.

AES-256-GCM Credential Encryption

All third-party credentials — SFTP passwords, SSH keys, S3 access keys, GCS service account JSON, Azure connection strings, Drive/Sheets/OneDrive OAuth tokens, and HTTP auth secrets — are encrypted at rest with AES-256-GCM. Decryption only happens at the moment of use, in memory, and is never logged.

SSRF Protection

All download URLs and cloud storage endpoints are validated against a private IP blocklist before connection. Attempts to connect to 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, or IPv6 equivalents are blocked. This prevents feed URLs from being used to probe internal infrastructure.

HMAC Webhook Validation

All incoming webhooks are validated with SHA-256 HMAC signatures using your app’s client secret. Unvalidated webhooks are rejected before any processing occurs. Webhook idempotency is enforced via a processed-webhooks table keyed on X-Shopify-Webhook-Id.

Prompt Injection Detection

Every LLM input and output passes through a security guardrail. Inputs are scanned for SQL injection patterns, script tags, path traversal, IP addresses, and oversized strings. Outputs are validated against the expected schema — unknown field names are rejected, dangerous content is stripped. All guardrail events are logged to an immutable security_breaches table.

Rate Limiting

OAuth routes: 20 req/min. Webhooks: 100 req/min. Admin endpoints: 30 req/min. Admin stats are additionally protected by HTTP Basic Auth. Rate limits are enforced per-IP via slowapi with Redis-backed counters.

Distributed Tracing

Every pipeline step — webhook dispatch, worker pickup, segment processing, finalization — is recorded with timing spans. Trace a sync run from trigger to completion, see exactly where time was spent, and identify bottlenecks across workers.

Error Capture & Audit Trail

All exceptions write to a centralized error log with shop domain, traceback, severity, and category. Sync runs produce immutable per-SKU history rows with variant IDs, trigger types, and change details. Partitioned by date with a rollup table for permanent run-level retention.

Sync History

Every sync run produces a detailed audit entry in the Sync History tab. Each row documents which SKU was affected, what changed (price, inventory, title, vendor), the trigger type (scheduled, manual, webhook), and the variant ID. Drill into any historical run to see exactly what happened — rows parsed, changes applied, errors encountered. Missing SKU reports show supplier rows that didn't match your catalog. Full export for CSV download. History is retained for 30 days with a permanent rollup for run-level summaries.

PII Redaction

Logging is PII-aware. Sensitive fields (credentials, tokens, personal data) are automatically redacted from log output. The redaction layer operates at the logging formatter level — nothing sensitive reaches disk or log aggregators.

Ready to see it in action?

Check out our pricing plans or get in touch with questions about your specific setup.

View Plans & Pricing →