{"id":359831,"date":"2026-09-01T13:42:17","date_gmt":"2026-09-01T13:42:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sellerkit-ai-shopping-feed\/"},"modified":"2026-09-10T06:57:14","modified_gmt":"2026-09-10T06:57:14","slug":"podsync-ai-product-feed-auditor","status":"publish","type":"plugin","link":"https:\/\/co.wordpress.org\/plugins\/podsync-ai-product-feed-auditor\/","author":23551761,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.3","stable_tag":"0.1.3","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Podsync AI Product Feed Auditor","header_author":"","header_description":"Finds the products a shopping channel will reject, before it rejects them. Checks barcode check digits, then builds the feed without the broken ones.","assets_banners_color":"fafaf9","last_updated":"2026-09-10 06:57:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/podsync.namubase.com\/ai-shopping-feed","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":178,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"globalmatchhub","date":"2026-09-01 13:42:01","revision":3676211},"0.1.1":{"tag":"0.1.1","author":"globalmatchhub","date":"2026-09-02 09:32:45","revision":3677618},"0.1.2":{"tag":"0.1.2","author":"globalmatchhub","date":"2026-09-04 05:10:33","revision":3680647},"0.1.3":{"tag":"0.1.3","author":"globalmatchhub","date":"2026-09-10 06:57:14","revision":3689419}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3694777,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3694777,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3694777,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3694777,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.1.1","0.1.2","0.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3676211,"resolution":"1","location":"assets","locale":"","width":1240,"height":1180},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3676211,"resolution":"2","location":"assets","locale":"","width":1240,"height":1040},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3676211,"resolution":"3","location":"assets","locale":"","width":1240,"height":620}},"screenshots":{"1":"The readiness screen: what stops your shop, what stops individual products, what costs position.","2":"Settings: the four things WooCommerce does not record and every channel asks for.","3":"Feeds: an address for the channels that read one, a download for the ones that do not."}},"plugin_section":[],"plugin_tags":[278970,279092,278971,279093,278972],"plugin_category":[],"plugin_contributors":[276733],"plugin_business_model":[],"class_list":["post-359831","plugin","type-plugin","status-publish","hentry","plugin_tags-feed-disapproved","plugin_tags-invalid-gtin","plugin_tags-product-disapproved","plugin_tags-product-feed-checker","plugin_tags-shopping-ads-rejected","plugin_contributors-globalmatchhub","plugin_committers-globalmatchhub"],"banners":{"banner":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/banner-772x250.png?rev=3694777","banner_2x":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/banner-1544x500.png?rev=3694777","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/icon-128x128.png?rev=3694777","icon_2x":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/icon-256x256.png?rev=3694777","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/screenshot-1.png?rev=3676211","caption":"The readiness screen: what stops your shop, what stops individual products, what costs position."},{"src":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/screenshot-2.png?rev=3676211","caption":"Settings: the four things WooCommerce does not record and every channel asks for."},{"src":"https:\/\/ps.w.org\/podsync-ai-product-feed-auditor\/assets\/screenshot-3.png?rev=3676211","caption":"Feeds: an address for the channels that read one, a download for the ones that do not."}],"raw_content":"<!--section=description-->\n<p>A shopping channel marks a product disapproved and does not really tell you why. The usual\nadvice is to open Merchant Center once a week and work through the diagnostics tab. That\nmeans you find out after the disapproval, and a disapproved product sells nothing in the\nmeantime.<\/p>\n\n<p>This plugin runs those checks in your own shop instead, before anything is sent. It does two\nthings, in the order that actually helps.<\/p>\n\n<p><strong>First it tells you what is wrong.<\/strong> Thirty-five checks against what the shopping channels\nask for, run over your real products, sorted by whether the problem stops your whole shop,\nstops one product, or just costs you position. Ten products with no barcode become one line\nthat says so, with links to three of them.<\/p>\n\n<p><strong>Then it builds the feed.<\/strong> For channels that read an address, you get an address to paste\nin. For channels that ask you to upload the file yourself, you get the file. Products with a\nblocking problem are left out rather than sent broken, because a feed full of rejects gets\nthe whole shop marked down, including the products that were fine.<\/p>\n\n<h4>Barcode check digits<\/h4>\n\n<p>A barcode with one digit mistyped is worse than no barcode at all. It looks right on your\nproduct screen, it passes an \"is this field filled in\" test, and the channel silently\nfails to match it. From the outside nothing appears to be wrong, so there is nothing\nprompting you to look.<\/p>\n\n<p>This plugin does the arithmetic. A GTIN, UPC, EAN or ISBN carries a check digit calculated\nfrom the digits before it, so a mistyped code can be caught before it costs you anything.\nIt also catches the commonest version of the mistake: a thirteen digit code with the last\ndigit dropped, which still looks like a valid twelve digit one.<\/p>\n\n<p>Be clear about what this can and cannot know. The channels separate a code that is <em>invalid<\/em>,\nmeaning the arithmetic does not come out, from one that is <em>incorrect<\/em>, meaning the arithmetic\nis fine but the code belongs to a different product. Arithmetic finds the first. Only the\nmanufacturer's own records can settle the second, so no plugin should claim to.<\/p>\n\n<h4>What it checks<\/h4>\n\n<ul>\n<li>Whether your shop can be listed at all: policy pages, return window, currency, shipping<\/li>\n<li>Barcodes: missing, wrong length, and check digit arithmetic<\/li>\n<li>Titles and descriptions: too short, empty, formatted in a way that will not survive<\/li>\n<li>Images: missing, too few, too small<\/li>\n<li>Prices: missing, and sale prices entered above the regular price<\/li>\n<li>Stock: status missing, quantity not tracked where a channel needs the number<\/li>\n<li>Variations: colour and size missing, variations with no parent<\/li>\n<li>Products a channel refuses outright, and downloads where only physical goods are accepted<\/li>\n<\/ul>\n\n<h4>What it will never do<\/h4>\n\n<ul>\n<li>Change or delete anything in your shop. It reads.<\/li>\n<li>Send your products, customers or orders to the plugin author.<\/li>\n<li>Put a feed at a public address for a channel that asks you not to.<\/li>\n<li>Tell you your shop is fine when it could not run the check.<\/li>\n<\/ul>\n\n<h4>Built for a real catalogue<\/h4>\n\n<p>A shop with twenty thousand products cannot be checked inside one page load, and a screen\nthat dies halfway is worse than a slow one. The check runs in pieces with a progress bar,\nand each piece hands back well inside what your host allows. The feed is written to a\nworking file and swapped into place only when it is whole, so a channel reading at that\nmoment gets the previous feed or the new one, never half of either.<\/p>\n\n<h4>Keeping up without updating<\/h4>\n\n<p>The shopping channels change what they ask for. Those requirements live in a signed rule\nfile the plugin fetches once a day, so a change on their side does not wait for a plugin\nrelease. Every file is checked against a signature made with a key that is not in this\nplugin, refused if it is older than the one already in use, and refused if it describes\nanything the plugin does not already know how to do. If any of that fails, or the server\ncannot be reached, your shop carries on with the rules it already had.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to one service, run by the plugin author, to keep its list of channel\nrequirements current.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> nothing. The request asks for a file and sends no shop data, product\ndata, customer data or identifying information of any kind.<\/li>\n<li><strong>What is received:<\/strong> a rule file describing what each shopping channel asks for, and a\nsignature for it.<\/li>\n<li><strong>When:<\/strong> once a day, and when you press \"Check for new rules now\".<\/li>\n<li><strong>Where:<\/strong> https:\/\/podsync.namubase.com\/rules\/ only.<\/li>\n<li><strong>Who runs it:<\/strong> globalmatchhub, the author of this plugin.<\/li>\n<li><strong>Terms of service:<\/strong> <a href=\"https:\/\/podsync.namubase.com\/rules\/terms\">podsync.namubase.com\/rules\/terms<\/a><\/li>\n<li><strong>Privacy policy:<\/strong> <a href=\"https:\/\/podsync.namubase.com\/rules\/privacy\">podsync.namubase.com\/rules\/privacy<\/a><\/li>\n<\/ul>\n\n<p>The plugin works without this service. Every release carries a full copy of the rules, and a\nshop that never reaches the service keeps using the copy it already has. Nothing is sent to\nit, so there is no data of yours to opt out of.<\/p>\n\n<p>The plugin does not contact the shopping channels themselves. Feeds are built inside your\nshop; you decide who reads them.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active first.<\/li>\n<li>Go to <strong>WooCommerce &gt; AI Shopping<\/strong>. The readiness screen runs the checks over your real\nproducts straight away, sorted by whether a problem stops your whole shop, stops one\nproduct, or just costs you position.<\/li>\n<li>Work down the list. Each line says how many products are affected and links to three of\nthem, so you can see the actual problem rather than a count.<\/li>\n<li>Go to <strong>WooCommerce &gt; AI Shopping settings<\/strong> and fill in the few things WooCommerce does\nnot record but every channel asks for. These are shop-wide, so you set them once.<\/li>\n<li>Come back to <strong>AI Shopping<\/strong> and open the feed for the channel you sell on. Channels that\nread an address get an address to paste in; channels that want the file get a download.<\/li>\n<\/ol>\n\n<p>Products with a blocking problem are left out of the feed rather than sent broken, because a\nfeed full of rejects gets the whole shop marked down, including the products that were fine.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20put%20my%20products%20on%20chatgpt%3F\"><h3>Does this put my products on ChatGPT?<\/h3><\/dt>\n<dd><p>No plugin can. Those channels admit merchants themselves, and at the time of writing not\nevery shop is eligible. What this does is get your product data into the shape they ask for\nand build the file, so that when you apply you are not turned down for the data.<\/p><\/dd>\n<dt id=\"will%20it%20change%20my%20products%3F\"><h3>Will it change my products?<\/h3><\/dt>\n<dd><p>No. It reads your shop and reports. Every fix is something you do yourself, on your own\nproduct screens.<\/p><\/dd>\n<dt id=\"my%20shop%20has%20thousands%20of%20products.%20will%20this%20time%20out%3F\"><h3>My shop has thousands of products. Will this time out?<\/h3><\/dt>\n<dd><p>The check runs in pieces and shows progress. Each piece stops well before your host would.<\/p><\/dd>\n<dt id=\"what%20if%20the%20plugin%20author%20disappears%3F\"><h3>What if the plugin author disappears?<\/h3><\/dt>\n<dd><p>Your shop keeps working. The rules are bundled inside the plugin, and the copy already\nsaved keeps being used. Nothing about the check or the feed depends on the author's server\nbeing up.<\/p><\/dd>\n<dt id=\"which%20barcode%20formats%20are%20checked%3F\"><h3>Which barcode formats are checked?<\/h3><\/dt>\n<dd><p>GTIN-8, UPC-12, EAN-13 and GTIN-14, including the leading-zero form.<\/p><\/dd>\n<dt id=\"why%20does%20merchant%20center%20say%20my%20product%20is%20disapproved%3F\"><h3>Why does Merchant Center say my product is disapproved?<\/h3><\/dt>\n<dd><p>The diagnostics tab names a category, not the row. The commonest causes are a barcode that\nfails its check digit, a missing or too-small image, a price mismatch between the feed and\nthe product page, and shipping or return information the channel could not find. This plugin\nruns the same checks against your shop and points at the actual products, before you send\nanything.<\/p><\/dd>\n<dt id=\"this%20tells%20me%20what%20is%20wrong%20today.%20what%20about%20next%20month%3F\"><h3>This tells me what is wrong today. What about next month?<\/h3><\/dt>\n<dd><p>This plugin answers the question you ask on the day you run it. A shop drifts, though:\nbulk edits blank a field, an import runs badly, a channel quietly raises its bar. None of\nthat produces an error, and the products simply stop appearing.<\/p>\n\n<p>A separate paid add-on, AI Shopping Feed Pro, keeps the history and emails you on the day\nsomething that used to pass stops passing. It is an add-on: it never switches anything off\nhere, and this plugin stays complete on its own.\n<a href=\"https:\/\/podsync.namubase.com\/ai-shopping-feed\">Details and price<\/a><\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>New check: your shop charges tax but shows prices without it. Outside the US\nand Canada the channels expect the price on the page to include tax, so the\nfeed and the page disagree and the product is rejected for a price mismatch.\nNothing about the product looks wrong, which is why this one is hard to find.<\/li>\n<li>Rules can now ask for several conditions at once. The tax check needs three,\nand two was the old limit. A rule file still cannot read a setting or use an\noperator it did not declare, nested or not.<\/li>\n<li>The rule loader read a version number that had been written down by hand and\ngone stale, so it could refuse a rule file this plugin was able to run.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>The addresses in the listing are links now. They were plain text, so nothing\non wordpress.org pointed here in a way a reader, or a crawler, could follow.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>The listing now says where the paid add-on is. It was not mentioned anywhere,\nso nobody using this could find it.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Finds what a shopping channel will disapprove, before it does. Catches invalid barcodes, missing fields and wrong prices, then builds a clean feed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/359831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=359831"}],"author":[{"embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/globalmatchhub"}],"wp:attachment":[{"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=359831"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=359831"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=359831"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=359831"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=359831"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/co.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=359831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}