Paste model numbers, the AI writes the copy with the website-wholesale prompt, and the results land in Airtable for review. This page only does the one marketplace, website-wholesale. Other marketplaces, catalog upload and collection names live in the Listing Generator.
Generate copy
Only editor and admin accounts can use this page; a reviewer account doesn't see it and the server refuses its requests.
Sign in at the top right. Until you do, the page shows nothing to use; a reviewer account is told it has no access.
The marketplace shows as website-wholesale and is fixed; there is nothing to pick.
Paste model numbers into "Model Numbers", one per line (a whole Excel column pastes fine). The counter shows how many were recognised; duplicates are dropped.
Click Generate. A batch code and progress bar appear, with one row per model going from Waiting to Done and showing the generated name. You can leave it running; refreshing or closing the page does not stop it, and it picks up again when you return.
Each collection gets a name and copy first (Call 0): the progress line first reads "Writing collection names and copy first". The models you pasted are grouped by the catalog's Collection Name and the AI writes each group once; a model with no Collection Name is a group of its own and the AI names it: the name cannot contain the word Collection or repeat a name already in use (the catalog, confirmed marketplace collection names, imported New Arrival files, earlier AI names, another group of the same batch); a repeat goes back to the AI with the reason, up to three tries, then the group is marked failed and the export lists it as missing its name. These results are only for the export (New Arrival columns H and I) and are not written to the product database; that happens when the checked file comes back through Content Import. A problem in this step does not stop the models being generated.
Website filter attributes (Style, Color, Bed Type...): while Call 1 plans the content it also picks these attributes for the product's category, from the options that category allows (the result is in the Payload Viewer's Content Plan, under attributes). Every category has its own prompt that names only the attributes that category has, with their options, and two or three earlier answers as examples (a third only when the first two together are under 3,000 characters). Exporting them to a New Template is in the Export Generated Content section. Categories with no earlier answers to learn from (Accent, Lighting, Media, Occasional) have not been tested for accuracy, so check them more closely.
When it finishes, click Open results in Airtable. Every cell is editable; your edits are stored apart from the AI's original output, so re-running a batch will not overwrite them.
If a model fails: it is marked red with the reason (most often the model isn't in the catalog yet) and the others carry on. Fix the data, then run the failed ones again as a new batch.
Stop, or get a batch back
Cancel: the Cancel button at the top right of the progress card. Items already generated are kept; anything still waiting is not generated.
Get one back: if the page didn't reconnect by itself, paste the batch code (starts with WS-) into "Resume a batch" and click Look up. It only searches the last 200 website-wholesale batches.
Content Import / Export
Saves each month's New Arrival (product copy, selling features, collection copy) and New Template (each product's website filter attributes and the allowed options) into the database, so a prompt's Fact for AI / Attributes for AI can pick them, and exports them back to Excel. Editors and admins both can; it is the "Content Import" tab of this page.
Open Content Import, choose the .xlsx and click Read file. The page works out whether it is a New Arrival (a new arrival sheet) or a New Template (a Casegood / Seating sheet) and shows how many models it found. The file is parsed in the browser; nothing is written yet.
Check the release month (guessed from the file name, editable) and the status. Only a file name containing approved defaults to Approved; everything else defaults to Draft — a draft can be previewed but not applied directly. Click Save as staged batch & preview.
Read the preview. New Arrival: product copy compared with the current long_description (identical / currently empty / differs only by spacing / will be replaced, with examples), how many selling features are new or replaced, how many models the collection copy covers, Collection Names that disagree with the catalog, models not found. New Template: how many attributes are new / unchanged / replaced, new attribute fields to be created, options added or switched off, values that are not in their options list.
Only Apply writes (a draft shows Mark approved & apply and asks once more). The last write wins: product copy goes to the same long_description column the catalog upload writes, so whichever ran last is what stays; every old value this import replaces is kept in the change log. Discard drops a staged batch.
Export AI-generated copy: open the Export Generated Content tab (between Generate and Content Import). The type defaults to "AI-generated copy (Wholesale batch)"; pick a Wholesale batch and click Export. You get a New Arrival sheet: the product copy (column J) and selling features (column K) are the AI's, every other column comes from the catalog. A model the AI marked as needing review (it found the facts contradict each other) and a model that failed are left out of the file and listed with the reason. After a person checks and edits the wording, rename the file to contain approved and upload it in Content Import, preview and Apply, and it is written to the catalog.
AI-picked attributes (Style, Color...): for a batch generated with an attribute prompt, choose the type "AI-picked attributes → New Template", then a New Template file, and click Export. Only the data rows (row 4 down) of that file's Casegood and Seating sheets are replaced; the header rows, merged cells, dropdowns and the Values sheet stay as they are, and each value goes to the column people used for it before. The New Arrival sheet above also takes columns L-Q (Style, Color) from the AI's picks. A model whose facts the AI flagged for review is still in the file and is listed after the export so you check it; a model whose prompt picks no attributes (for example a Mattress Set) is left out. After checking, upload the file in Content Import the same way.
New Template files are kept on the server: when a New Template is read and staged in Content Import, the file is stored on the server automatically. The server keeps only the newest 5 (by month); older ones are deleted automatically. When an export needs a template, the "Template to fill" list defaults to the newest month stored there, so there is nothing to upload; to use another month pick it in the list, or choose "Upload a file…" (with "Also keep this file on the server" ticked it is stored too; the month, for example 2026-10, must be in the file name).
Export what is already in the database: on the same tab change the type to New Arrival or New Template, then pick an import batch (in the original file's order) or paste a column of models. A New Arrival becomes a new sheet with the files' own columns. For a New Template first choose the template file to fill — only the data rows (row 4 down) of its Casegood and Seating sheets are replaced; the header rows, merged cells, column widths, frozen panes, the Values sheet and every dropdown definition stay exactly as they are. Afterwards it says which models were skipped and which values found no column. The recent batches are listed lower on this tab; View jumps to Content Import and shows that batch's preview.
Where it lands: product copy → long_description; Selling Features → the new selling_features column; collection copy → the collection_copy table (stored per block per month, not by name alone); attributes → one filter_… field per attribute (Style, Color…, up to 3 values kept in order); allowed values → the attribute_options table (used to check values). A prompt's Fact for AI can pick selling_features and collection_marketing_copy; the filter_… fields show up under Attributes for AI once Airtable's Attribute Fields table is refreshed.
Admins: the prompt and the payload
Only admin accounts see the Payload Viewer tab.
Edit the prompt: in Airtable's Prompt Manager, edit the row whose Marketplace is website-wholesale, then tick Publish (building it in the Prompt Assistant works too).
Make it live: in the Payload Viewer click Sync Prompts. It syncs website-wholesale only and leaves other marketplaces alone. The result shows under the button; a failed publish is also explained in that row's Live Info.
Collection name and copy (Call 0): pick a batch in the Payload Viewer and "Collections (Call 0)" below lists each group's name, members and copy, with what was sent and the raw response one click away. The "Call 0 prompt" at the top can be edited right there (click Save prompt; it applies to the next batch). It is one shared prompt for every Wholesale batch, not a row in Airtable's Prompt Manager, so it does not need Sync Prompts.
The category prompts are derived, do not hand-edit them: in the Prompt Manager, Wholesale-Seating, -Bedroom-Youth, -Dining, -Office, -Accent, -Lighting, -Media, -Occasional and the four Wholesale-SET-… rows are generated by scripts/build_wholesale_attribute_prompts.py from Wholesale-all / Wholesale-SET (adding the category's own attribute rules, the option enums and two or three earlier labelled examples; only a set row carries the set rule). To change how the copy is written, edit those two base rows; after a new month's New Template has been imported, or after editing a base row, run the script again (--out folder to look at the drafts first, then add --push to write them to Airtable; it never ticks Publish), then publish row by row. Before publishing a set row, remove its set type from the Wholesale-SET Scope, or the publish says the scope is already taken.
See what was sent: pick a batch and a model to see the config, system prompt, user message and raw response sent to OpenAI, plus every field written to Airtable. The batch list only holds website-wholesale batches. Export batch CSV saves the whole picked batch as one table, a row per model: Call 1's status, the review reasons (Review flags), each attribute the AI picked (one column per attribute), the collection name and copy, the product copy and the five bullets, then everything the viewer shows: Call 1's Content Plan, Config, System Prompt, User Message and raw response, and the same for Call 2 (a cell too long for Excel is cut). The first column, "Needs attention", marks the models the AI flagged for review, that failed, or that have no copy; filter on it first.
One-time setup before first use: (1) the Marketplace field on Airtable's Batches, Generation Items and Prompt Manager tables needs a website-wholesale option (type it into any row's Marketplace cell and choose Create); (2) Prompt Manager needs a published website-wholesale prompt. Without (1), Generate says the marketplace isn't an Airtable option yet; without (2), each model fails because no prompt is found.