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.
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., QTY → QTY_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.
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.
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.
read_translations, write_translations, read_locales) beyond the standard set — because it writes to a Shopify API surface that no other feature touches.
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.
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.
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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 →