Adzira Product Hub

Bulk URL imports · catalog analytics

⏳ Apify (upstream scraper) is degraded — imports are slow. Self-heal will retry automatically when it recovers. ⏳ Pipeline is backed up — oldest Pending row is min old.

/ systems green

Net sales today

Ad spend

ROAS

Orders

AOV

CM3 net profit

AI spend yday

As of

Overnight resolved ·
Needs attention

For you

Checks & automations last full run step of
Nightly chain running
Systems of healthy · checked
Live feed every signal · newest first

No activity recorded yet.

Fixed without you last 24h · no action needed

P&L

· updated

Snapshot is stale — these numbers may not reflect the last hour.

Inventory deposits

Deposits paid to the supplier per warehouse batch — every unit sold makes its per-unit deposit refundable. Outstanding = accrued by sales − already refunded. · report — STALE (daily 06:40 UTC cron may have failed)

Mapping problems — these rows may be wrong

Bestsellers

What is actually selling, per brand. Read-only — nothing here changes anything. · sources — STALE

sales (UTC, rolling) · ads (account timezone, includes today)

Dedicated asset group — standing bar
read-only · re-runs the image preflight live


          

The bar: top-20 by 30-day net sales · at least 1.5% of brand net · at least 60 ad-attributed conversions · ROAS at least 1.5× the brand blend · sustained rather than a spike · at least 10 distinct visual sessions · 45 days of stock · in season · not already covered. Every gate is evaluated; an un-judgeable one is reported as such and never counted as a pass.

An asterisk on ad cost means the spend comes from a campaign that serves more than this country — Germany's ads run in DAT, which also covers Austria — so it is that campaign's cost, not purely 's. The bar below stays brand-wide: its thresholds are calibrated on brand volume, and re-using them per country would manufacture candidates out of smaller numbers.

This is not /collections/bestseller. That page ranks by units, is capped, excludes 25 woven-bag handles and is deliberately shuffled to hide sales rank from competitors. This one ranks by 30-day net sales and hides nothing.

API costs

Anthropic + OpenAI spend. Provider invoices where connected; our own per-call ledger for which workflow spent it. · snapshot — STALE

Product Quality

Factory-defect complaints per product, flag at ≥3 complaints and ≥1.5% of 180d units (min 20 units), or ≥6 complaints

·

Flagged now

Complaints 7d

ProductBrand Complaints Units 180d Rate DefectsState
No products above watching. The nightly scan keeps this current.

Support

Georgie → Gorgias · · up since

Supplier pricing

Reading cost maps and live sales…

Reputation

Trustpilot · reviews across brands

Reading Trustpilot…

Issues

What the automation owns — deduped, with state that survives a reload. Anything only you can move is on Today under “For you”.

No issues in this view.

Checks

Press a button, a Claude session inspects the system and reports back here.

Feeds

Every GMC feed from build to what Google actually shows a shopper.

Cannot verify is not a pass. Those checks did not run or could not see their target, so nothing is claimed about them either way — they hold the all-clear back on purpose.

No health percentage is shown here on purpose. Feeds fail as a few hundred products in one market, which any total-based ratio rounds away — counts of verified claims, or nothing.

Automations

Every scheduled job, when it last wrote to its log, and whether that's late.

Chronic offenders last 30 days · ranked by what actually interrupted you
Source Reached you Handled quietly Critical Occurrences Last

“Reached you” counts escalate-tier incidents only. “Handled quietly” is the auto-fix / aggregate / upstream work the board deliberately never shows — it is a success measure, not a backlog.

owner-routing exception(s) recorded via “Not mine” — the weekly review lists them for promotion into proper rules.

Job Schedule Last run Status


      

Product Import

Paste URLs from anywhere — newlines, commas, spaces, spreadsheet paste, inline prose. Individual product URLs or entire Shopify collection URLs (e.g. /collections/dresses) both work — collection URLs auto-expand into one row per product.

🚀 Submitted URLs
Draft Created Pending 🔄 in flight 🔴 Error

→ Product Imports • status = Pending

Analytics

Imports submitted per day + products published (draft → active) per brand per day.

Imports (window)

Imports submitted per day

Products launched (draft → active) per brand

Sourced from each brand's Shopify published_at field.

Loading…

Launch count is based on Shopify's published_at field for each store.

Catalog

Active-product breakdown by type, season, and (ZEYA only) jewelry vs fashion. Sourced from each store's Shopify.

Loading…

Jewelry
Fashion
Total active products

By product type

By season

Season is inferred from title + tags keywords (e.g. "wool/fur/knit" → Winter). Rough bucket, good for volume-planning.

Product ROAS

Shopify sales × Google Ads spend × COGS. Products losing money surface at the top.

Net sales (Shopify)
COGS
Ad spend
Net profit
Losing money
Snapshot stale — falling back to live data
Product Brand Units Net sales Ad spend Ad ROAS COGS Cost Net profit Actions
No sales or ad activity in this window.
No products match the current view / search / removed filter.

How it works

The full reference lives in the ClaudeCode Wiki — open the Notion article →

The flow

  1. You paste product URLs (AliExpress or competitor Shopify stores) on the Product Import page.
  2. You pick one or more target brands (SOERA, ZEYA, SOKYND, OLANE).
  3. Each URL becomes a Pending row in Airtable “Product Imports”.
  4. Every 15 min, a cron job on the VPS picks them up, scrapes the source, generates unique AI content per brand, and creates a draft product in each store’s Shopify admin.
  5. You review drafts in Product Imports (this app) or directly in Shopify, then publish.

Loox reviews — automatic

  • As soon as a Shopify draft is created, a background job generates Loox reviews for that product — no manual step.
  • AliExpress sources: real 4–5★ reviews with photos are scraped from the source URL, plus AI top-ups to reach ~20–25 reviews per product.
  • Competitor Shopify sources: AI-generated reviews only (no photos, since those sources have no public review data).
  • Rating mix: 70% 5★, 25% 4★, 5% 3★. Dates spread across the last 7–90 days.
  • Reviews appear on Loox the morning after the import (nightly loox_daily.sh batches + uploads via Playwright).
  • Failures are posted to #loox-reviews on Discord; the Shopify draft is never blocked by a Loox hiccup.

Multi-brand rules

  • Source is scraped once per URL; content is regenerated uniquely per brand. Titles and descriptions differ across brands — not copies.
  • Title generator enforces a luxury brand blacklist (~90 trademarked names like Celine, Chanel, Dior, Tiffany, Stella, Vera, Kate) to avoid legal/PPC conflicts.
  • First-name uniqueness per brand — the AI fetches existing products for that vendor and avoids reusing names.

Status lifecycle

Pending Scraping Scraped Generating Importing Draft Created

A row stuck on Error can be re-queued by flipping status back to Pending in Airtable.

Pricing (fixed per product type)

Top / Blouse €34.99
Shorts / Set €34.99
Mini dress €39.99
Pants €39.99
Midi dress €44.99
Coat / Jacket €44.99
Maxi dress €49.99
Shoes €59.99

Compare-at price is randomized per product at 20 / 25 / 30% off to look like a natural sale.

What gets set on every draft

  • Category — Shopify Standard Taxonomy (Dresses, Coats & Jackets, Clothing Tops…), mapped from the product type
  • Fit Active Segment metafield = 3 (required by the SOERA theme)
  • Age group = Adults / Target gender = Female (Shopify Taxonomy metaobjects)
  • Images — full gallery from source (Apify + direct HTML fallback); variant images are assigned by AI color detection for multi-color products
  • Inventory = 10,000 per variant
  • Status = Draft (never live until you publish)

Supported URL types

  • AliExpress — any product URL (Apify scrapes; falls back to direct HTML if Apify returns too few images)
  • Shopify stores — any product URL from any public Shopify store (no API key needed)
  • Shopify collections — paste a collection URL like competitor.com/collections/dresses and the pipeline auto-expands it into one Pending row per product. Target brands selected on the submit form carry through to every expanded row.

Troubleshooting

Re-submitted a URL with a new brand
No longer rejected as duplicate. Submit reports cloned: N — the new brand(s) are cloned from the existing draft and queue for the next cron tick. Skipped only when every requested brand already exists on the row.
Submit stuck on “queued…” for a brand
The cron runs every 10 min. If it stays “queued” for much longer, the row may be in Error. Check the table and look for a red error message.
Wrong images / too few images
Some AliExpress products are geo-restricted — Apify returns only 1 image and the HTML fallback may also fail. Ping @Paul to handle manually.

Product Imports

of most recent — mirrored from Airtable

Quick filter: Showing of

No records yet

Head to and queue some URLs.

""
Img Status Source SOERA ZEYA SOKYND OLANE Submitted
— End of history —
No conversations yet.

AI Assistant Degraded · retry in min

Diagnose errors · retry rows · clear caches · escalate to Paul. Writes get a 30-second undo window.

Queue

Ask about a failed import, or tap one below.

No errors right now 🎉 · Try “queue status” or paste a Shopify admin URL.

Enter to send · Shift+Enter for newline. All actions logged; writes echo to Discord.

🚫

Retry won't help

source:

Clone to

Pick a source brand whose Shopify product will seed the clone. The pipeline will create the target draft within ~3 min.