# Production guide — One catalogue, Google and Etsy

**Manuscript:** [Prepare one product for Google and Etsy](../appmint-sell-anywhere.md). **Available:** real local Studio captures, saved product channel choices, provider setup screens, persisted pricing-rule states and actual API validation/calculation output. **Not available:** authorised Google/Etsy connection, accepted external listing, provider order import, stock/price synchronisation or a recorded companion video.

## The useful story

Priya wants a second sales channel without creating a second catalogue of mistakes. Follow the same welcome-sign SKU from its product settings through provider setup, validation, price calculation and destination checks.

The strongest teaching moment is the cost calculation: $18 cost with 15% markup and a `.99` ending returns $20.99; the same request without cost returns $51.99 from the $45 selling price. Film the real API responses and explain the difference before any live provider action. Do not narrate $51.99 as the automatic result of the product’s existing cost-based rule.

## Fresh local evidence — 24 September 2026

Use these current captures for the product-selection and pricing chapters:

| Asset | What it establishes |
| --- | --- |
| `local-product-channels-reopened.png` | Actual saved Google/Etsy chips after full reload; original fixture selection restored afterwards |
| `local-rule-create.png` | Disabled rehearsal rule, 15% markup and priority 10 |
| `local-rule-reloaded.png` | Same disabled rule persisted after reload |
| `local-calculator-current.png` | Repaired price/cost fields; no connected destination |
| `local-pricing-live.json` | Real staff-authenticated database calculations: 20.70, 51.75, excluded SKU 45 |
| `local-cleanup.json` | Rehearsal rule removed and absence checked |

No provider credentials were supplied or mocked. Do not cut these frames into a claimed successful marketplace sync.

## Earlier media

All screenshots are in [appmint-channels](../assets/appmint-channels/). The [capture ledger](../assets/appmint-channels/evidence.json) holds timestamps, route and visible text.

| Asset | What it establishes |
| --- | --- |
| `01-channel-dashboard.png` | Actual eight-tab module and zero-sales dashboard; fixed percentage chips remain visible |
| `02-channel-catalogue.png` | Eleven definitions, no connected accounts |
| `03-mapping-entry.png` | Categories/Attributes/Templates UI; not the old topic’s invented individual Validate form |
| `04-markup-rule.png` | Filled training rule before creation; no `.99` control exists here |
| `05-rule-readback.png` | Rule after the explicit API lab, scoped to Etsy and disabled |
| `06-calculator-no-channel.png` | Historical old calculator; superseded by `local-calculator-current.png` |
| `07-product-channel-selection.png` | Google/Etsy selected on the product; numbered callouts identify the chips |
| `08-partner-sync.png` | Product selection and provider destinations, with no sync performed |
| `09-etsy-quick-setup.png` | Etsy OAuth entry, not a completed connection |
| `10-etsy-manual.png` | Manual Configuration opens a provider catalogue |
| `11-etsy-config-fields.png` | EtsyProvider fields, all credentials empty |
| `12-google-quick-connect.png` | Google Merchant Center OAuth entry |
| `13-google-config-fields.png` | GoogleProvider’s broader manual form, credentials empty |

Use these exact captures where the manuscript cites them. Do not substitute an unrelated provider’s connected-state clip, or reuse a stock chart to imply sales performance.

## API evidence

- [api-lab.json](../assets/appmint-channels/api-lab.json): product read, validation and the initial empty-string All Channels rule mismatch.
- [pricing-lab.json](../assets/appmint-channels/pricing-lab.json): original rule, scoped update, both cost cases, different-SKU control, disable operation and final readback.
- [eligibility-lab.json](../assets/appmint-channels/eligibility-lab.json): product’s saved `etsy/google` list, excluded eBay result, Google warnings, Etsy local pass and disabled rule state.

These files contain selected training data and no tokens. Show their calculation fields as API output, not inside a recreated Appmint calculator screen. The request/response mismatch is repaired locally. The 24 September real Studio capture shows separate Base Price and optional Unit Cost inputs. Its channel selector remains empty without a configured provider; successful price outputs in this course are authenticated API evidence, not a completed UI calculator run.

The API lab changed the same UI-created training rule, not a production business rule. The historical experiment was disabled and limited to the training SKU/Etsy. The new 24 September experiment was disabled, then deleted and absence verified. Preserve this explanation when cutting between the filled UI form and later rule readback.

## Suggested chapter sequence

| Chapter | Capture sequence | Narration purpose |
| --- | --- | --- |
|1 · What “connected” means | Product channel chips → account status → Partner Sync | Separate product eligibility, account access and a published listing |
|2 · Find your way | Sales Channels dashboard and its eight tabs | Explain which question each area answers; fixed percent chips are not real growth |
|3 · Choose the sign’s destinations | Product → Sales Channels → wait for chips → choose Etsy/Google → Save → reopen | Blank is all, selected chips express restrictions |
|4 · Configure Etsy | Partner Sync → Configure Etsy → Quick Connect; optional Manual → EtsyProvider | Show exact fields and explain shop versus shipping-profile identity |
|5 · Configure Google | Configure Google Merchant Center → Quick Connect; optional Manual → GoogleProvider | Keep Merchant Center identity separate from Ads/Maps fields |
|6 · Validate honestly | Mappings actual screen → labelled API Google/Etsy/eBay responses | A local pass is not provider acceptance; exclusions and missing fields mean different things |
|7 · Price before push | Training rule → cost-versus-price graphic → actual API outputs → disabled rule | Prevent a cost-markup mistake from becoming a live price |
|8 · One controlled listing | Prepared SKU → one provider action → individual result → actual external listing | To be captured only with an authorised provider account |
|9 · Buyer and operator checks | Actual personalisation, images, price and controlled order in the marketplace | Demonstrate the handoff and disclose adapter gaps |
|10 · Keep it in step | Listing ID → later update → order/stock reconciliation | Avoid duplicate listings and unsupported automation claims |

Plan separate setup, developer-lab and provider-rehearsal chapters. Do not compress all three into an apparently complete two-minute publish sequence. An editorial target of 15–20 minutes for setup/lab is reasonable; no footage of that duration has been recorded.

## Original graphic brief

Create a simple three-column price comparison from the saved JSON:

1. Product selling price:45.
2. Cost provided:18 ×1.15 =20.70 → `.99` ending →20.99.
3. Cost omitted:45 ×1.15 =51.75 → `.99` ending →51.99.

Label it **Explanation of the captured API results**. Use arrows to show the different bases. Do not place these figures in a fake provider listing or fake invoice. Add a second small diagram with three independent checks: eligible product, connected account, accepted listing.

These graphics are a production brief, not existing rendered media. The Markdown tables and Mermaid diagram provide the current visual explanation.

## Provider rehearsal prerequisites

Before recording a live connection, have the business supply a controlled seller account, an authorised representative and a product they are prepared to list. Know whether the action creates a draft, creates a live offer, incurs a fee or modifies an existing listing. Keep provider credentials and authorisation codes out of raw footage as well as edited output.

For the sign, the website’s broken image and product-route failure must be resolved. Google cannot be demonstrated with a link that opens an unrelated catalogue or crashes. The Etsy adapter also needs a truthful maker/timing configuration and an actual personalisation plan; its current request does not create Appmint’s three questions or upload images.

Use real product identifiers where assigned. Do not type the old topic’s invented barcode to make a validation badge green. Confirm handmade-product handling against Google’s actual requirements and the integration’s generated payload.

## External acceptance sheet

Record evidence for each destination separately:

| Check | Required result |
| --- | --- |
| Authorised account | Expected merchant/shop, saved after normal OAuth/configuration |
| Product selection | One intended training SKU, no accidental bulk selection |
| Local validation | Actual fields and remaining warnings, not a fabricated all-green screen |
| Provider result | Individual listing response, not only an outer success envelope |
| External identity | Actual listing/offer ID associated with that SKU |
| Price | Destination amount/currency matches the approved pricing model |
| Image | Working destination image with the right default |
| Product link | Correct company/site product opens as an ordinary visitor |
| Personalisation | Required name, size and file behaviour tested at the destination |
| Maker/timing | Describes the actual production process |
| Re-sync | Proves update behaviour or clearly exposes duplicate creation |
| Order | Actual controlled marketplace order and its instructions can be fulfilled |
| Stock | Reconciled before/after; no inferred automatic decrement |
| Fulfilment/refund | Actual supported route and provider result, separately tested |

Until these checks exist, record setup and diagnostics rather than a claimed successful multichannel business.

## Editing notes and open issues

Wait for asynchronous channel chips before capturing the empty-state message; it resolved in this review. Do not portray that moment as a permanent defect. Show long provider forms in readable consecutive views. GoogleProvider includes fields for several services; avoid implying every field is necessary for Merchant Center.

Keep the real pricing gotchas: empty-string All Channels filtering, cost input, descending priority, API-only rounding and the separation between calculation and product-push paths. Keep Etsy’s create-versus-update and personalisation/image limitations alongside publishing, where they matter.

The next producer must capture actual external authorisation, listing, personalisation, images, update behaviour and order/stock reconciliation. No OAuth grant, marketplace publication or video render was performed during this course conversion.

## Local calculator acceptance —24 September

Use [Google result](../../application-fixes/assets/channels-local/calculator-google-local-success.png) and [Etsy result](../../application-fixes/assets/channels-local/calculator-etsy-local-success.png). Show SKU, base price, optional cost and selected channel, then Calculate Price. With no enabled rules,45remains45; explain this baseline before the separate15% cost-markup experiment. No connected account is required and nothing was published or synced. Do not reuse the earlier empty-channel screenshot as the current instruction. Actual requests used /calculate/google and /calculate/etsy with matching response channels.
