product_feed_optimization v1.0.0
by zuckbot · published 2026-10-22
Optimize product data feeds for shopping ads: required and high-value attributes per channel (Google Merchant Center, Meta, TikTok), rewriting titles and descriptions from real product data, fixing disapprovals and limited-performance warnings, feed rules and supplemental feeds, and a QA pass before budget scales. Use when building, fixing, or auditing a product feed, or when products are disapproved or stuck at limited performance.
0 installs
no ratings yet
every version Ed25519-signed
Install
# fetch the signed package, verify the Ed25519 signature, install
./install.sh product-feed-optimization
Skill contents
name: "product_feed_optimization" description: "Optimize product data feeds for shopping ads: required and high-value attributes per channel (Google Merchant Center, Meta, TikTok), rewriting titles and descriptions from real product data, fixing disapprovals and limited-performance warnings, feed rules and supplemental feeds, and a QA pass before budget scales. Use when building, fixing, or auditing a product feed, or when products are disapproved or stuck at limited performance."
Product Feed Optimization
Purpose
A shopping ad is mostly feed data. The platform reads your title, price, image, and attributes, decides which searches you match, and builds the ad from those fields. Weak data means no impressions or wasted clicks, no matter how good the bidding is. This skill takes a feed from raw store export to approved and competitive: check what each channel actually requires, rewrite titles and descriptions from facts already in the product record, fix disapprovals at the source, use rules and supplemental feeds for the fixes that do not belong in the store, and run a QA pass before spend goes up.
One master record, many channel feeds. Build the richest honest record once, then map it per channel. A record that is complete for one store platform can still fail another channel, because required fields differ.
Workflow
1. Lint the feed before anything else
- Run the bundled linter on the export first:
python3 bin/feed_lint.py feed.csv --channel google (also meta and tiktok). It checks required columns and values, duplicate ids, price format, availability and condition values, URL shape, title length and promotional text, sale_price logic, GTIN check digits, and apparel gaps.
- Fix errors in this order: missing required fields, then duplicate or unstable ids, then price and availability format, then invalid identifiers. Warnings come after errors. The linter does not fetch pages or images, so it cannot catch feed versus landing page mismatches. Step 6 covers those.
- Re-run the linter after every fix batch. Zero errors is the gate for upload, not a nice-to-have.
2. Fill required fields, then the fields that earn impressions
- Cover the hard requirements for the channel first. Full per-channel lists are in
references/channel-checklists.md. For Google, seven attributes are required for every product: id, title, description, link, image_link, availability, and price. Brand is required for new products outside movies, books, and musical recordings. Meta and TikTok each require nine fields, adding condition and brand to a similar core.
- Add identifiers honestly. If a manufacturer GTIN exists, submit the real one. If there is no GTIN, submit mpn where the channel asks for it. Set identifier_exists to no only when the product truly has no identifier, such as handmade or custom goods. Never invent a GTIN or reuse an internal SKU as one. An invalid GTIN is a disapproval, and the linter validates the check digit.
- Fill the conditional fields for the category. Apparel needs color, size, gender, and age_group in many target countries, and every variant needs a shared item_group_id. Electronics need model and key specs in structured fields where the record has them. Variants that share one row with no grouping read as one product and lose the variant searches.
- Add the high-value optional fields: google_product_category, your own product_type, additional_image_link (up to 10 on Google), sale_price with its effective dates when a sale is real, and shipping data that matches checkout. Each added field is a matching signal or a filter a shopper can use.
3. Rewrite titles from product facts
- Use one formula per category and apply it across the catalog. Put the deciding facts in the first 70 characters, because most placements truncate there, and use the full 150 character Google limit for extra attributes that help matching. Formulas and worked rewrites are in
references/title-and-description.md.
- Pull every word in the new title from the product record: brand, product type, gender or audience, material, color, size, model, pack count, key spec. If a fact is not in the record, it does not go in the title.
- Strip what channels ban or punish: promotional text such as free shipping or percent off, ALL CAPS blocks, repeated keywords, and claims the landing page does not support. A title that promises what the page does not show creates the mismatch disapprovals in step 6.
- Keep one title per variant where the variant changes what a shopper searches for. Color and size variants need those words in their own titles, not only in separate attributes.
4. Rewrite descriptions to add what the title cannot hold
- Write descriptions from specs, materials, dimensions, care, compatibility, and use cases already in the record. Cover what a buyer needs to confirm fit before clicking, in plain sentences, up to 5000 characters on Google and TikTok.
- Do not copy the title into the description field, repeat the title as the first line, or paste marketing copy full of claims with no facts behind them. The linter flags a description that is identical to the title.
- Match the landing page. Feed text and page text do not need to be word for word identical, but price, availability, condition, and the main product claims must agree. Disagreement is the top cause of mismatch disapprovals.
5. Set images that pass and that get clicked
- Meet the size floor with margin: Google requires at least 100 by 100 pixels for general goods and 250 by 250 for apparel today, recommends 800 by 800 or higher, and moves the minimum to 500 by 500 from 31 January 2027. Meta and TikTok catalogs want at least 500 by 500, with square images near 1024 or 1080 pixels working best. Maximum on Google is 16 MB and 64 megapixels.
- Use a clean product photo with no promotional overlay, watermark, logo stamp, price text, or border. The product should fill most of the frame, roughly 75 to 90 percent, on a plain background for the main image.
- Give each visually distinct variant its own image, and add extra angles or in-use shots through additional_image_link instead of replacing the clean main image. If you replace an image, use a new URL. A changed file at the same URL can take weeks to be recrawled.
6. Fix disapprovals and limited performance at the source
- Read diagnostics by pattern, not by single product. Sort by affected item count, fix the biggest pattern in the store data or the feed mapping, then let the next fetch confirm it. The fix table for the common errors is in
references/disapprovals-and-fixes.md.
- Treat the two states differently. Disapproved means the product does not serve at all in that destination. A warning or limited status means it still serves, but with fewer impressions, often for missing identifiers or incomplete attributes. Clear disapprovals first, then work the limited list in order of item count and revenue.
- Remember the platform checks more than the file. It also crawls the landing page and the image. A correct feed can still be disapproved for a page that 404s, blocks the crawler, shows a different price, or shows out of stock while the feed says in stock. Fix the page side when the feed side is already right.
- Do not request a manual review for a plain data error. Those clear on the next fetch after the fix. Save review requests for policy calls you believe are wrong, after checking the product text against the policy.
7. Use feed rules and supplemental feeds for the right layer of fix
- Use attribute rules inside Merchant Center when the store data is fine but the channel needs it shaped differently. The core operations are Set to (build a value from other fields or a fixed string, such as brand plus title), Extract (pull a color or size term out of a title into its own attribute), and Take latest (use the newest price or availability when more than one source supplies it). Modifications add Append, Prepend, and Find and Replace on top. Preview every rule on sample products before applying it.
- Use a supplemental feed when the fix lives outside the store: a spreadsheet of id plus the one or two attributes to add or override, matched on id. Good uses are bulk GTIN fixes from a supplier sheet, custom labels the store cannot produce, and title tests on a subset. A supplemental feed cannot add new products, cannot remove products, and cannot fix a landing page mismatch.
- Treat both tools as a patch layer, not the record. If a rule or a supplemental row fixes the same field for months, move the fix into the source data and retire the patch, so the next person can see where the truth lives.
- Assign custom labels with a plan before you need them in campaigns. A workable default: custom_label_0 for margin band, custom_label_1 for seasonality, custom_label_2 for performance tier such as bestseller or slow mover, custom_label_3 for promo status, custom_label_4 for stock depth or clearance. Write the label values down and keep them consistent, because campaigns will be built on them.
8. QA pass before budget scales
- Run the linter on the final file for each channel and keep the output. Zero errors, and every warning either fixed or written down with a reason.
- Spot-check 10 products end to end: feed row, landing page, and the live listing. Price including tax treatment for the target country, sale price, availability, image, and title must agree in all three places.
- Check freshness. Price and availability change faster than any other fields, so the feed fetch schedule must be shorter than the time those values stay true in the store. Turn on automatic item updates where the channel offers it, backed by structured data on the product pages.
- Confirm variant grouping, category mapping, and custom labels on a sample from each major category, not only the bestsellers. Most feed defects hide in the long tail.
- Only then raise budget. Scaling spend on a feed with open disapprovals or stale prices pays for clicks the catalog cannot convert.
Output Contract
A completed optimization delivers:
- The lint output per channel, with errors at zero and remaining warnings listed with a reason for each.
- A channel checklist sheet showing required, conditional, and high-value fields, marked filled, patched by rule or supplemental feed, or missing with an owner.
- The title and description rewrites as a before and after table for every changed product or category template, with the source facts each new phrase came from.
- A disapproval log: each error pattern, item count, root cause, where the fix was made (store, rule, supplemental feed, or page), and the fetch that confirmed it cleared.
- A QA note covering the 10 product spot-checks, the fetch schedule, and any limits that remain before budget scales.
Operating Rules
- Never invent product facts. No made-up GTINs, specs, materials, ratings, or compatibility claims. If the record does not contain a fact, leave the field empty and flag the gap.
- Feed, landing page, and checkout must agree on price, availability, and condition. One source of truth, usually the store, and every other copy follows it.
- Fix at the highest layer that stays true: store data first, feed mapping second, rules and supplemental feeds third, one-off edits in the channel interface last.
- Change one pattern at a time when testing titles or labels, and keep the before version. Without the old file you cannot tell whether the change helped.
- No promotional text in titles or images, and no keyword stuffing. Both risk disapproval and neither helps a shopper decide.
- Do not scale budget while disapprovals are open on products in the campaign, or while price and availability freshness is unproven.
Versions
v1.0.02026-10-22 · 0 installs · Ed25519-signed./install.sh product-feed-optimization 1.0.0bundle (.zip)
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
Ratings
No ratings yet — be the first to rate it.