Rocket Shopping Feeds GSF v2.x Overview Welcome to Rocket Shopping Feeds User's Guide This guide covers features of v2.x of the formally known Google Shopping Feed extension. If you're running older versions, consider upgrading or follow our 1.x user guide. VERSION 2.X.X Getting started Installation & upgrades Set up Google Shopping Shipping and Tax Run Adwords campaigns Enable automatic item updates Set up Google Inventory Google Promotions Set up Bing Catalog Bing Catalog Tax Set up ShareASale Feeds management Adding a feed Generating the feed Testing and Troubleshooting Optimizing feed output General Configuration Columns Map Categories Map Product Filters Product Options Configurable Products Grouped Products Bundle Products Shipping Run Schedule FTP Uploads Cloning a feed setup Migration to another magento How-to articles Set up stores and feeds for multiple countries Use pricing from simple child products Detaching feed generation from magento cron Setting up products with Minimum Advertised Pricing Developing custom feeds Search this documentation How to use this guide If you're just starting out with this product, you should follow the steps at Getting Started; otherwise, if you are looking for details on a specific configuration, use the left side navigation on this page to find the appropriate information. Solution lookup Use the "search this documentation" for keywords that are relevant to your issue.  Get Support If the solution you are looking for cannot be found here, please submit a request using our Service Desk.      Troubleshooting Page: Testing and Troubleshooting Page: Optimizing feed output Page: Installation & upgrades   Google Shopping Feed Page: Enable automatic item updates Page: Google Promotions Page: Run Adwords campaigns Page: Set up Google Inventory Page: Set up Google Shopping Page: Shipping and Tax Recently Updated Pages Detaching feed generation from magento cron Apr 03, 2020 • contributed by Dorin Mirulescu 2.2.2 Nov 12, 2019 • contributed by Dorin Mirulescu 2.2.1 Sep 17, 2019 • contributed by Dorin Mirulescu 2.1.9 Apr 01, 2019 • contributed by Dorin Mirulescu 2.2.0 Apr 01, 2019 • contributed by Dorin Mirulescu Show More Developer Releases Releases File lists Upload, preview and share files with your team. 1.5.20 Release Notes New Features Adding bundle options to overwrite cumulative weight. Adding admin setting for overwriting configurable sub-items availability for out of stock parent item. Checked EE 1.14.0.1 and CE 1.9.0.1 compatibility. Check support for WebShopMatrix Bundle products apparel now have the option to detail sub-items Add map directive capabilities to Replace Empty feature Remove duplicate configurable sub-items when they are visible in catalog instead of not visible individually. Bundle sub-item form unique URLs which autoselect on product page bundle options so that the feed item matches information on page Implement description fallback logic for configurable apparel sub-items using "Associated products - Fetch description from" GSF-94 Moved submit products with no image setting to Skip product with empty setting.  GSF-84 Refactor including products only from selected categories for easier output only specific categories Bugs Fixes Fix batch mode freeze after an incomplete batch run. Added lock file cleanup for this situation. Fix shipping methods list in config dropdown to reflect the config scope Force shipping request to SalePrice if Price is not set; this fixes wrong shipping info been computed for methods with price threshold. Fix price rounding issue when includes tax price Fix grouped product price - include tax Fix configurable sale price - date range issues Fix hasSpecialPrice errors, causing invalid special price to show up for some products. Fix configurable price when no configurable attributes are found in product definition. Fix showing special price instead of catalog rule price when special price is not effective. Add support for apparel size_type and size_system Fix unique URLs for associated configurable items Fix grouped product to include the tax when using min price from the group of products. Grouped price fix when set to compute sum of the associated items Fix bundle pricing with special price Allow special price of children to be overwritten with values from the configurable Force qty = 1 for grouped products when is not defined. Fix price excluding tax on bundle and configurable Fix special price including tax. Fix segmentation fault for grouped products Fix GSF-65 infinite price overwrite loop 1.6.0 Release Notes New Features Google Automatic Item Updates Concatenate attributes using a string template Cascade column mappings using replace empty values rules. Bug Fixes Fixed admin router, support for SUPEE-6788 GSF-145 Fix Sale Expiry date GSF-160 Product Type Using Magento Category directive enhanced to include all active product categories GSF-96 Refactor / simplify the "Associated products - Fetch ..." dropdowns and code logic, also fix apparel not following the logic. GSF-96 Correlate "Associated products - Fetch main image from" logic to "Replace Empty" rules, so that replace empty happens for both parent and associated when cascading them. GSF-202 Do not skip duplicates in test mode to avoid no output for stand alone products in test mode. GSF-197 Fix inherit apparel columns to configurable from associated items when feed is set to add only configurable in the feed. GSF-64 Added uninstall shell script. GSF-96 Fix skipped possible duplicates  GSF-270 Fix default configs to match config options and fix config paths failing to save the values in DB GSF-270 fix duplicates removal - missing visible items when parent is not included in the feed. GSF-72 Support for google automatic items update through microdata on product page. GSF-66 Added concatenate attributes feature & enhanced the column map configuration grid. GSF-322 Limit shipping weight to only 2 decimals. GSF-324 fix double currency conversion when including taxes in price GSF-328 add option to specify which image type to output with the image directives. GSF-317 Add option for product type by magento category directive to limit the number of category paths at output. GSF-313 Fix the setting to skip empty columns GSF-297 Cleaned up old apparel variant logic causing mixed warning messages 1.6.1   Release notes New Features [GSF-407] - Weee tax (Eco Tax) not included in Google Product Feed [GSF-444] - Support Ayasoftware's Simple pricing extension Support for Aitoc_Aitcbp Cost-based automatic pricing Support for MagicToolbox_Magic360 images Support for Configurable Swatches and Google re-marketing tag getting updated. Improvements [GSF-108] - Change "Configurable attribute overwrites" to work on Feed columns [GSF-431] - Dynamic Remarketing - Google [GSF-474] - Better Microdata implementation. Block added on "content" to work on more themes. Bug Fixes [GSF-90] - Missing weight for out of stock configurable [GSF-101] - Make sure we don't use the flat category collection [GSF-124] - Not default stock statuses + no attribute skips all products [GSF-410] - Global Skip out of stock also skips In stock variants [GSF-466] - Error: unexpected T_FUNCTION [GSF-468] - Enable extension just for a store-view doesn't work [GSF-473] - brand is no longer overridden by default in Grouped and Bundles children [GSF-497] - [SCP] Configurable products don't fetch price from simples when price is empty, don't fetch sale price at all. [GSF-498] - Special price on configurable children with mark-up don't add mark-up [GSF-513] - A valid bundle, with no options, takes all available options [GSF-546] - Single quotes in column titles generate an error in javascript [GSF-448] - fix badly formatted output of Concatenate directive [GSF-425] - fix fatal error for PHP 5.2 or lower  [GSF-460] - fix identifier_exists to return false when only one identifier has value.  [GSF-504] - Fix the upgrade script removing the by Google Category By Category and Product Type By Category values for version < 5.3 [GSF-407] - Fix Sale Price for configurable associates having price that vary by option. [GSF-511] - Remove grouped and configurable associates that are disabled from the feed. [GSF-506] Enhance Item_Group_Id directive to split a configurable product into multiple parent products by non-variant options like: shirt_style, fit, than vary them by color, size, material or pattern. 1.6.2   Release notes New Features [GSF-376] - Custom Options - support base magento feature. Simple products with custom options can now be detailed in the feed as options combinations per row. Added support for WebShopApps Productmatrix shipping extension EE Gift Card products can now be exported Bug Fixes Fix missing #fragment from associated products URL. Ex. use of #utm_source=google_shopping instead of ?utm_source=google_shopping. Fix controller permission to work with SUPEE-6285 security patch. Fix URLs when not using server rewrites Refactored Apparel configuration section Catalog rules now use the logged-out group, so you can correctly exclude rules from applying in the feed if they don't apply to guests (Google only sees logged-out prices) Yes/No attributes now export correctly Configurable products with 0 price are now correctly skipped Better skip counts for complex products item_group_id is a default column fix URLs when server rewrites are off Quotes and double quotes in titles and descriptions now export correctly Product Type using Magento Category now works correctly on multiple storeviews     1.6.3   Release notes This version includes a pricing rewrite for all product types, which address a few corner-case issues with pricing. Bug Fixes fixes last-digit rounding issues for prices with and without tax  fixes rounding issues when using storeviews with currency conversion fixes rounding issues with configurable pricing and mark-up prices on options, with and without tax fixes an issue with special price from Catalog Rules, on configurable products with mark-up pricing on options 1.6.4   Release notes New Features Added microdata "condition" to output Added support for Amasty simple configurable price. Added memory limit catcher in batch mode Enhance Concatenate Attributes Directive to return empty String if all attribute values are empty Limit the output of "Item Group ID" directive to 50 chars max. independently of attribute count Added support for qty_increments Bug Fixes Fix JS warnings on Configurable PDP Fix MSRP usage Fix how Quantity Increments are applied to the price Fix JS error when custom options is a radio button Fix various PHP warnings & notices Fix expiration date to show proper value instead of 1 year in the future Fix bundle availability and cleanup some special character Fix price rounding for CE version 1.7.0.2 or older Fix bug regarding special_price not being shown Fix size & color for configurable item when associates are been skipped. Fix JS warnings on Configurable PDP 2.0.0 Multi-feed support Release Notes New Features: - Support multiple feeds for the same store - Allow setting different currency than the store displayed one - Support for google inventory feeds - A new interface for managing feeds - FTP uploads support - Added run schedules with multiple runs per day - Access to the feed processing logs - Easy feeds migration from staging (import/export) - Fixed grid filters throwing exceptions - Fix skip log counts to count the parent and simple product. Also test mode should not change the full run counts.   2.0.1: Updated 'value' column in rw_gfeed_feed_config table from TEXT to MEDIUMTEXT   Demo site:  http://feed.rocketweb.com/admin Login: demo / demofeed20 Add this line to you hosts file: 23.253.172.203 feed.rocketweb.com   Dev site: Admin: http://dorin.sv1.magetesting.com/PYJzN8335/admin/ Admin login: dorin / 69582GurqeVm     FTP: ftp://dorin.sv1.magetesting.com FTP login: mt_dorin / d6dc667cf3 2.1.0   Release Notes Concatenate directive now supports including both columns and attributes into concatenation template Pull of correct configurable attribute values into the concatenate directive, regardless of 'Fetch title from' setting Added category matching by priority into the Category Map widget Added granular product type definition into the Category Map widget Support for new GTIN requirements New feeds support Google Promotions Feed https://rocketweb.atlassian.net/wiki/display/RSF/Google+Promotions Bing Catalog Feed https://rocketweb.atlassian.net/wiki/display/RSF/Set+up+Bing+Catalog ShareASale Feed https://rocketweb.atlassian.net/wiki/display/RSF/Set+up+ShareASale 2.0.3 Hot Fix: - Missing feed headers when allowed_memory is reached and feed goes automatically in batch mode. - Disabled categories been pulled through Taxonomy By Category directive. - Shipping currency is off when specifying the a different feed currency. - Microdata display information specific to associated item based on URL params.   2.0.4   Hot Fix: - Category tree under product options won't save values. - Detect php max_execution_time and switch to batch mode automatically before script failing. - Duplicates check for bundle items with associated also visible in catalog. - Detailed products in the feed by custom options missing price currency. - Use image cache to output product image urls instead of direct media urls. - Rendering large category numbers on the feed configuration page. - Taxonomies not been saved because reaching the max_post_vars. 2.0.5   Hot Fix: Fix additional image keep repeating same file Added option to customize item_group_id output in old format. Adjusted directive Identifier Exists to configure which columns are required.  Gtin support with directive 'Identifier Attribute' allowing to pull the less expensive item attribute if configurable or grouped attribute is empty, and from most expensive item on bundle products.  Fix index.php/admin store view in the URL when Mageworks_Megamenu is installed. Fix missing product_type when using directive Product Type using Magento Category Path.   2.1.1   Release Notes: Fixes: - Backwards compatibility with magento 1.6.x - A better shell script with options to skip logs, upload or skip ftp - Fixed FTP upload for Google promotions feed - Fixed an issue where categories mapping wouldn't work for Canada locales - Fixed issues with the scheduler - Share-a-sale now outputs correct header - Fixed php compatibility issues with Share-a-sale - Fixed adding store code to ID - Fixed an issue with the Hook directory missing - Catalog Rules are now calculated correctly, always using the Logged out group (just like Google sees it) - Remove a wrong warning of duplicate skipped products   2.1.2 Release notes: - Fix identifier_exists - Fix shipping prices with configurable children with differing weights - Fix shipping weight and rate for a grouped parent - Fix shipping weight and rate for a grouped parent - Add option to disable Magento cron, so you can use the custom shell cron without commenting in XML - Expose config to turn SCP on and off - Fix availability with backorders 2.1.3 Release notes - Microdata is fixed on all product types - Microdata also works with SCP - Add missing delete button on price buckets and replace empty filter rules 2.1.4   Release Notes: Fix missing condition microdata Fix duplicate check on configurable and bundle sub-items.  Convert installer to raw sql so it works with older versions of magento. Fix dates inconsistency on promotions tab. Fix errors around missing product options specified in columns map and functions definition compatibility. Fix promotion rule matching in Promotions Id directive. Fix missed schedule in cron autogeneration of the feed.   2.1.5   Release Notes: Fix hidden exception on feed save. Inherit title from parent setting under Configurable and Grouped products does not work. Allow spaces in feed columns, required for local inventory feeds: https://support.google.com/merchants/answer/3061342 Attempt to fix FK constraint table errors.  Fix categories from other stores output in "Product Type by Magento Category" directive. Fix schedule not been processed - date format.   2.1.6 Release Notes Remove disabled categories in product_type_by_category computation, and fix priority sorting. Fix usage of prefixed tables around salesrule. Fix infinite loop when doing concatenation for replace empty title column Fix removed feeds causing processing to create a new generic feed each time cron runs. Fix identifier_exists inconsistent values, changed default behaviour.  Fix effective and display dates randomly resetting under Google Promotions tab when configuration is saved Fix error array_intersect(): Argument #1 is not an array in Adapter/Abstract.php. 2.1.7 Version Log: Add ability to change file delimiter and value enclosure. Fix configurable "Fetch images from" not applying for additional images. Do not upload test files to FTP. Fix bundle item price to include tax when configured, pulling price out of default options. Fix javascript change event on bundle product page, Fix bundle price to pull one from default selection. Add directive to output tier qty. Add directive to output any inventory attributes. Fix catalog rules matching for bundle with dynamic prices. 2.1.8 Version Log: Add support for php 7.2 Fix qty increments division by zero issue. Fix skip attribute admin input causing edited products to be skipped unintended. Fix support for developer starter module. Fix usage of group price when computing sale price. 2.1.9 Version Log: Code cleanup & fix codesniffer issues. Add support for POS_SimplePrice module. Fix special price end date, missing last day of availability. Add option to disable qty increments from price computation. 2.2.0 Change log: Add setting to dictate if selected products are included or excluded from feed. 2.2.1 Release log: Fix find & replace not applying on certain directives. Allow restricted tags in the description column. Fix pricing of configurable associated products visible in catalog. Allow specific tags in the concatenate directive. Fix output of associated products that are visible in catalog. Fix product type check visibility and concatenation not following description inheritance setting. Shipping for associated products. Fix bundle price output around default configuration fix/dynamic. Fix php 7.2 warning. Fix price output for configurable sub-items with qty increments enabled. Convert usage of serialized strings to json format, required with code-sniffer severity=10. 2.2.2 Release log: Fix serialization issues for versions > 1.9.4.1. Fix missing default columns map post migration to json. Fix mixed serialized values in xml configs clashing with json migration. Extension unit testing Extension unit testing Pre-requests Install vanilla Magento CE 1.9 with magento_sample_data_for_1.9.1.0 Install extension and switch to correct branch (currently  phpunit for 2.0, 2.1.0 for 2.0+)  How to run Install phpunit v4.8.x or later.  Get it from https://phpunit.de/, and include it in your path: mv phpunit.phar /usr/local/bin/phpunit Copy file  app/etc/local.xml.phpunit.template into  app/etc/local.xml.phpunit and edit the file (fields: dbname, secure_base_url, unsecure_base_url) Same DB has to be configured in both local.xml and local.xml.phpunit Run cd /magento_root/ # run all tests phpunit   # run with debug info, will show all test parameters phpunit --debug   # include HTML report in the local.dev/report/index.html phpunit --coverage-html report   # run through XDebug, and debug your tests in the IDE (works for PhpStorm 10) export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=127.0.0.1 remote_connect_back=0" phpunit   # disable XDebug export XDEBUG_CONFIG="" Expected result: $ phpunit PHPUnit 4.7.6 by Sebastian Bergmann and contributors. .................. Time: 7.9 seconds, Memory: 54.50Mb OK (18 tests, 18 assertions) How to add test for: Add Columns Map test Add Feed File test Unit test Expansion List   Unit test Expansion List This is a work-document where we list all the possible tests that we need to create. Each provider test must include all generic mappings!   Mappings Generic Mappings Google Mappings Bing Mappings Mapping parameters Product values Running SCP Tests Mappings Generic Mappings Only Generic mapping test must include: Mapping parameters tests Product values tests Generic Directive Mappings Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapDirectiveId                     mapDirectiveStaticValue                     mapDirectiveProductReviewAverage                     mapDirectiveProductReviewCount                     mapDirectiveUrl                     mapDirectiveImageLink                     mapDirectiveCategoryImageLink                     mapDirectiveAdditionalImageLink                     mapDirectivePrice                     mapDirectiveSalePrice                     mapDirectiveSalePriceEffectiveDate                     mapDirectiveQuantity                     mapDirectiveAvailability                     mapDirectiveExpirationDate Can't really be tested because this is not a fixed value Can't really be tested because this is not a fixed value         Can't really be tested because this is not a fixed value Can't really be tested because this is not a fixed value Can't really be tested because this is not a fixed value   mapDirectiveShippingWeight                      mapDirectiveGoogleCategoryByCategory                   Rename to mapDirectiveTaxonomyByCategory  mapDirectiveShipping                      mapDirectiveProductTypeMagentoCategory                      mapDirectiveIsBundle                     mapDirectiveVariantAttributes                     mapDirectiveProductOption                     mapDirectiveConcatenate                     Generic Attributes Mappings Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapAttributeDescription This is currently a fallback for mapColumnDescription This is currently a fallback for mapColumnDescription         This is currently a fallback for mapColumnDescription This is currently a fallback for mapColumnDescription This is currently a fallback for mapColumnDescription   mapAttributeName                     Generic Column Mappings Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapColumnDescription                   This should be changed/removed 3rd Party Extension Directives Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapDirectiveImageLink360Magic                     mapDirectiveExternalImageLink                     mapDirectiveAdditionalImageLink360Magic                     mapAttributeAwShopbybrandBrand                     Google Mappings Google Directive Mappings Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapDirectivePriceBuckets                     mapDirectiveIdentifierExists                     mapDirectiveItemGroupId                     Bing Mappings Google Directive Mappings Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Comment mapDirectivePrice                     mapDirectiveSalePrice                     Mapping parameters Mapping Parameter Comment Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) Generic Mappings                     mapDirectiveId Store Id                   mapDirectivePrice Tax Yes/No                   mapDirectiveSalePrice Tax Yes/No                   mapDirectiveUrl Suffix                   mapDirectiveImageLink Base / Small / Thumbnail                   mapDirectiveAdditionalImageLink Base / Small / Thumbnail                     Product values Product attribute Comment Simple Products Configurable Products Grouped Products Bundle Products Giftcard Products Simple Associated Configurable Associated Configurable SCP (external extension related) Configurable SCP Associated (external extension related) MSRP                     Minimal Order Quantity                     Order Quantity Increments                       Running SCP Tests The SCP tests have been written by using the OrganicInternet_SimpleConfigurableProducts extension. This extension hasn't been updated in a while and there's an issue when installing it. You can read more about the issue here https://www.magentocommerce.com/magento-connect/simple-configurable-products.html in the Reviews tab. The extension committed to the RSF repository contains a modified version of the Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Indexer_Price_Configurable class which fixes the issue. A re-indexing is required in order for the code to work. Add Columns Map test All of the files are located inside: magento_root/app/code/community/RocketWeb/GoogleBaseFeedGenerator/ if not written otherwise! In all YAML files be extremely careful of space denotation (using two spaces)! Setting up default columns map Open test  Test/Model/Generator.php and edit method  RocketWeb_GoogleBaseFeedGenerator_Test_Model_Generator::getColumnsMap() /** * @test * @loadFixture feed * @loadFixture config * @loadExpectation * @dataProvider dataProvider */ public function getColumnsMap($feedId) { // Comment out this line //$expected = $this->expected('map_%s', $feedId)->getData(); $this->setModel(); $map = $this->model->getColumnsMap(); // Add this two lines $tmp = $this->toYaml($map, ' '); $this->debug($tmp); // Comment out this line //$this->assertEquals($expected, $map, "Columns map was changed!"); } Open fixture  Test/Model/Generator/fixtures/feed.yaml  and add new feed: tables: rw_gfeed_feed: - id: 101 store_id: 0 name: 'PHPUnit feed' type: 'generic' status: 1 - id: 102 store_id: 0 name: 'PHPUnit feed' type: 'google_shoppings' status: 1 # Copy a section and change id & type value, id must be 100+ (101, 102, 103, ...) Open fixture  Test/Model/Generator/providers/getColumnMap.yaml and add: ... Existing lines ... - - 103 # Feed ID - add the ID from the previous step Run the test with filter (phpunit --filter getColumnsMap) and this time, you will receive an output inside the console:   phpunit --filter getColumnsMap PHPUnit 4.7.6 by Sebastian Bergmann and contributors. .' id: column:id attribute:rw_gbase_directive_id param:0 order:10 title: column:title attribute:name ... MORE OUTPUT ... attribute:rw_gbase_directive_product_type_magento_category param:3 order:120 ' . Copy the whole text between two qoutes (so lines from id to the end) for the last chunk (each feed will output this chunk) Open file  Test/Model/Generator/expectations/getColumns.yaml and add: ... Existing code ... map_FEED_ID: # FEED_ID is the ID from step 2 id: column:id ... The chunk copied in previous step ... attribute:rw_gbase_directive_product_type_magento_category param:3 order:120 Revert the changes in 1. step and rerun phpunit Add Feed File test Open extension file  Model/Config.php and edit method  RocketWeb_GoogleBaseFeedGenerator_Model_Config::_beforeSave() to a public method (we are modifying the extension file - only temporary) /** * Processing object after save data. Form data preparation after submitting. * * @return Mage_Core_Model_Abstract */ public function _beforeSave() { switch($this->getPath()) { ... The rest of the method ...   Open fixture  Test/Model/SimpleProduct/fixtures/testRunFeeds.yaml  and add new feed: tables: rw_gfeed_feed: - id: 101 store_id: 0 name: 'Generic feed unit test' type: 'generic' status: 1 - id: 102 store_id: 0 name: 'Generic feed unit test with tax' type: 'generic' status: 1 - id: 103 store_id: 0 name: 'Google shopping feed unit test' type: 'google_shopping' status: 1 # Copy a section and change id & type value Open test  Test/Model/SimpleProduct.php and uncomment method  RocketWeb_GoogleBaseFeedGenerator_Test_Model_SimpleProduct::generateFeedConfig() and add \@ to the phpDocs: /** * test //- add @ * loadFixtures testRunFeeds //- add @ */ public function generateFeedConfig() { $feedId = 1; // Change to ID from step 2! parent::generateFeedConfig($feedId); } Run the test with filter (phpunit --filter generateFeedConfig) and you will receive an output inside the console: $ phpunit --filter generateFeedConfig PHPUnit 4.7.6 by Sebastian Bergmann and contributors. Warning: Deprecated configuration setting "strict" used ' - feed_id: 3 path: general_name value: - feed_id: 3 value: 168 ... The rest of the output ... - feed_id: 3 path: shipping_carrier_realtime value: ups,usps,fedex,dhl,dhlint ' . Time: 632 ms, Memory: 24.00Mb OK (1 test, 0 assertions) Open data provider  Test/Model/SimpleProduct/fixtures/testRunConfigs.yaml and add the chunk you copied in the previous step (make sure that the alignment is correct): ... Existing lines ... # -------------------------------- # Default simple product feed. # type: google_shopping # Add your type # tax: no - feed_id: 103 path: general_name value: - feed_id: 103 value: 168 ... The rest of the output ... - feed_id: 103 path: shipping_carrier_realtime value: ups,usps,fedex,dhl,dhlint Be careful! Make sure you enclose all serialized strings, otherwise you will receive an error when running phpunit! Also:  replace value for path categories_provider_taxonomy_by_category by: '{"4":{"category":"4","value":"Women -> Test","disabled":false},"5":{"category":"5","value":"Men -> Test","disabled":false}}' remove paths: general_name, general_store_id add value for path general_currency: USD change path general_feed_dir to var/feeds don't forget to add the comment at the top of the new chunk (so its more readable) Reverse the change from 1. step (from public to protected) and comment back the method from 3. step (also remove \@) Open provider  Test/Model/SimpleProduct/providers/simpleProductsFeeds.yaml and add new provider line: - - 101 #Feed ID - tax: 0 - - 102 #Feed ID - tax: 10 - - 103 #Feed ID - tax: 0 # Copy a section and change feed id to the one added 2. step, add under tax new line with "debug: 1" - - FeedId - tax :0 debug: 1  Then run the test:  phpunit --filter simpleProductsFeeds $ phpunit --filter simpleProductsFeeds PHPUnit 4.7.6 by Sebastian Bergmann and contributors. 'id item_group_id title description link image_link additional_image_link price sale_price sale_price_effective_date availability shipping_weight brand mpn condition product_type google_product_category identifier_exists is_bundle 1231000231 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1231000231/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1231.jpg 1231.31 USD 1100.31 USD out of stock 0.00 lb not specified msj000 new TRUE FALSE 1232000232 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1232000232/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1232.jpg 1232.32 USD 1100.32 USD out of stock 0.00 lb not specified msj001 new TRUE FALSE 1233000233 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1233000233/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1233.jpg 2032.00 USD 1100.33 USD out of stock 0.00 lb not specified msj002 new TRUE FALSE' . Time: 2.59 seconds, Memory: 51.00Mb OK (1 test, 0 assertions) Copy everything in between the single qoutes (') and paste it into  Test/Model/SimpleProducts/expectations/simpleProductsFeeds.yaml #feed_FeedID_HasVAT feed_103_0: #Simple products, google_shopping result: - 'id item_group_id title description link image_link additional_image_link price sale_price sale_price_effective_date availability shipping_weight brand mpn condition product_type google_product_category identifier_exists is_bundle' - '1231000231 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1231000231/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1231.jpg 1231.31 USD 1100.31 USD out of stock 0.00 lb not specified msj000 new TRUE FALSE' - '1232000232 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1232000232/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1232.jpg 1232.32 USD 1100.32 USD out of stock 0.00 lb not specified msj001 new TRUE FALSE' - '1233000233 Book Book http://local.gsf2.dev/index.php/catalog/product/view/id/1233000233/s/book/?utm_source=google_shopping http://local.gsf2.dev/media/catalog/product/1233.jpg 2032.00 USD 1100.33 USD out of stock 0.00 lb not specified msj002 new TRUE FALSE' Notice that each line is enclosed as a string.   Open provider  Test/Model/SimpleProducts/providers/simpleProductsFeeds.yaml remove  debug: 1 line and run full unit test  phpunit   $ phpunit PHPUnit 4.7.6 by Sebastian Bergmann and contributors. .............. Time: 4.57 seconds, Memory: 52.50Mb OK (14 tests, 17 assertions)  Well, this is it for the simple products. Now redo this whole section, replacing wording "SimpleProducts" with "ConfigurableProducts" Getting started Getting started   Getting your products submitted to marketplace is a two step process and could take several iterations to get it right. The amount of effort you need to put in, depends on the quality of your catalog data and the amount of errors you'll be getting when your feeds are been reviewed. 1. Install extension Follow the Installation & upgrades steps. Search this documentation 2. Setup the feeds Set up feeds following the guide corresponding to the marketplace of your choice: Google Shopping Google Inventory updates Feeds management Adding a feed Generating the feed Testing and Troubleshooting Optimizing feed output Cloning a feed setup Migration to another magento   Installation & upgrades Backing up Installing or upgrading this extension will make changes in your database, so it is best to have a backup of your database before proceeding. Requirements min PHP 5.3.x Magento CE > 1.4.2, EE > 1.9.2 Step-by-step guide Follow these steps to install the extension, or to upgrade from an older version of the extension. Disable Compilation In the Magento admin panel, go to System >Tools > Compilation. In case Compiler Status is "Enabled", click on the Disable button. In case the status is disabled you can skip this step. (see Fig1.1) Fig 1.1 Disable Compiler Status [missing screenshot: disablec1.png] Download and ExtractDownload and extract (unzip) the extension's contents on you computer. Navigate inside the extracted folder. Upload filesUsing a FTP client, upload the content of the extension directory to the store's document root, so that the app directory in the extension folder merges with the app directory on the server. If asked to replace any files, select "Yes". Clear the cache In the store admin panel, go to System > Cache Management and press Flush Magento Cache button.(see Fig 1.2) Fig 1.2 Flush Magento Cache [missing screenshot: cc.png] Set cron script  Magento's cron.php should be running each 5 min or more frequent. This can be set through CPanel or directly on your server console as show in the right snippet. Replace MAGENTO_PATH with the actual path on the server. Reach out to your hosting provider to help set it up. More on how to install magento cron. An alternative would be to detach feed generation from magento cron.crontab -e */5 * * * * /bin/sh MAGENTO_PATH/cron.sh   Feeds Management After the extension was installed, look under Catalog > Rocket Shopping Feeds in the store admin, to start setting up your feeds. (see Fig 1.3)  Read more about managing your feeds. Fig 1.3 Rocket Shopping Feeds Troubleshooting I don't see Rocket Shopping Feeds in the admin.  Please verify that you have turned off compilation. If compilation is off, make sure you have uploaded all the files in the store's web root.  I get 404 when trying to access the feed's admin. Logout & Login back into the shop admin panel to refresh admin permissions that allow access to the new installed section. My site is broken. Our extension is significantly modularised and we have never yet seen it break any site when it's fully uploaded and compilation is off.  If your site does break, try reverting from a backup and contact us for support through http://help.rocketweb.com   Uninstall Most of the times, you don't really have to completely remove the extension, you could just disable it from: app/etc/modules/RocketWeb_GoogleBaseFeedGenerator.xml If you do want to completely remove this extension, open a shell console to your server and run shell/gsf_uninstall.sh script. This script will attempt to remove all extension files and also cleanup your database. Alternatively, you could manually remove all files from your server, by following the archive structure to find out where files are located on your store. Set up Google Shopping Set up Google Shopping Prepare your Merchant Account Configure the feed Submit the feed to Google Google will review your products, process takes around 24 hrs, and results will be displayed under Diagnostics tab in Merchant Center. Prepare your Merchant Account If you don't already have an account, set up one: https://support.google.com/merchants/answer/188493 Once store is claimed and validated, we recommend the following: Settings > SFTP and FTP  - create an FTP account within the Merchant Center, generate a password and keep it safe as we will need it later. (see Fig 1.4) Settings > AdWords - link the merchant center to your AdWords account. Settings > Tax - set the tax rules similar to your magento tax zones. Fig 1.4 SFTP and FTP settings Configure the feed Follow the steps on adding a feed section and use Google Shopping Feed under Feed Type. Set the target Store View.  If you have different store views for each target country, you may want to create a feed for each of those stores.  When you change the store view, Feed Currency should be set on the default displayed currency for that store. (see Fig 1.5) Fig 1.5 Store view Review Columns Map tab. Basic columns are preconfigured to match most catalogs. If the default value does not match your catalog, then you should change it to one that suits your catalog setup. If your store sells Apparels, you'll have to add in the apparel required columns: color, size, gender and age_group. Since apparels are mostly configurable products, use the Variant Attribute directive to map size and color columns onto configurable attributes. If your apparels are simple products with custom options instead of configurable products, you should use Custom Options in the mappings instead of Variant Attribute. Custom Options directive allow you to choose which options hold that particular column information. (see Fig 1.6) Fig 1.6 Columns Map     US stores should not include tax in the product prices, so turn them off under the price and sale_price columns (see Fig 1.7) More options on how to set your feed columns, can be seen at Columns Map page.   Save feed configuration ! Fig 1.7 Product prices         Categorize products under Categories Map tab. First choose the right Feed Localization, which corresponds to target country and language of your store. Use the autocomplete boxes for each of your categories to find a matching google taxonomy. You should always pick something from the autocomplete list, otherwise google will not validate them.   Here you have a chance to exclude products from certain categories, by unchecking the related green box from the right side. (see Fig 1.8) Google will not accept products without a valid taxonomy, and if you have products that are not assigned to a category, you could use the Include products w/o category to exclude them. Save feed configuration ! Fig 1.8 Categories Map Select Shipping rates. Depending on the complexity of your store shipping definition, you can provide the rates to google in multiple ways. This configuration allows you to map your shipping rates in basic shipping methods like: flat_rate, table_rates, free_shipping. (see Fig 1.9) More complex shipping methods like carrier rates or rates by individual product can be set by following the Shipping and Tax guide.  After selecting the Shipping Methods, make sure you also select the target country under Countries select. Fig 1.9 Shipping rates     Set the FTP Uploads  Use the Add Account button and fill in the FTP account details created in preparation of your Merchant Center. (see Fig 1.10) See more information on FTP Uploads. Validate and Save feed configuration !Fig 1.10 FTP Uploads Submit the feed to Google Register the feed with Merchant Center Navigate to Feeds under merchant center and select + FEED button, then follow the steps to register it: Mode = Test,  Feed type = Products Target country - should correspond to the Feed Localization and Feed Currency set earlier at step 2. from feed configuration in magento. Feed name - can be anything, but for consistency, name it the same way as you did in magento. (see Fig 1.11) Fig 1.11 Register new feed Input method = Regular Uploads You could also go with Schedule fetches, and set the feed URL to the one generated in magento, but it's more convenient to use FTP uploads. File to be uploaded = feed_.txt (see Fig 1.12) Replace the with the feed ID in magento, as it can be seen in the feed management screen. Fig 1.12 Upload settings Generate the feed Click the Run Now button in the feed feed management screen, and wait for the feed to complete. This will generate the feed file and also upload it to your Merchant Center. (see Fig 1.13) Feed will process daily, so at this step you may also adjust the Run Schedule if you need to. Check our guide on Generating the feed for more details. Fig 1.13 Generate Feed   Analyze results Once the feed has completed, go into the Merchant Center and select the feed you just registered.   Check the number of item processed and see if there are any errors with processing. If there are errors, follow our Testing and Troubleshooting section to help solve them.   Once you clear errors, register the feed live by redoing the step 1. only this time Mode = Live, and use the same feed_.txt file as used for the test one.   More on Google Shopping Shipping and Tax Run Adwords campaigns Enable automatic item updates Set up Google Inventory Google Promotions Run Adwords campaigns Shopping campaigns offer a simple and flexible way to organize your Google Merchant Center product inventory within AdWords.  To understand how google campaigns work please follow Setting up shopping campaigns. Once your feed is submitted and approved, create an AdWords account and connect it to your Merchant Account under Settings > AdWords. Doing so, your products should become available for shopping campaigns.   Setting up custom labels Setting up Price Buckets In October 2014 Google converted all Product Listing Ads to Shopping Campaigns; therefore, adwords_labels is deprecated and shouldn't be used any more.  If your products are approved in Merchant Center but they are not visible in AdWords campaigns, you may need to contact a Google representative to help. The basic product campaign is to bid the same way for all your products, but you can improve your ads by bidding differently on groups of products.  Edit your campaign in AdWords, and go to Product Groups and click the "+" sign to find out how you can group them. Those groups can be defined using the following columns in the feed: Category - is the google_product_category column in the feed and also the main way to organize your products into groups. It is filled with google taxonomies that should have been set as part of Set up Google Shopping Brand - is your brand column in the feed, mapped by default to manufacturer attribute on your products. Item Id - is your item_id column from the feed and should be mapped by default to your product ID from magento.  Condition - is the condition columns from the feed, by default all products having value "new". If you want to change that, create a new attribute on your products, set the accepted values on your products and map it under Columns Map. Product type - is the product_type column in the feed, and should correspond to magento categories. That is if, product_type is mapped to Product Type by Category directive in the Columns Map. Custom label 0-4 - should correspond to columns in the feed custom_label_0 to custom_label_4, and allow you to specify custom data on which you can group products. Those columns are not mapped by default in your feed, so you will need to add them. If you want to group your products for use in a Shopping campaign, you'll need to setup custom labels in your feed.        Setting up custom labels To use custom labels, you'll need the following: Create new product attributes To create new product attributes in Magento, one for each label. If you already have an attribute, you can use that. If it's not a drop-down, that's ok too, but please be aware of its limits, and make sure it has consistent values, otherwise your grouping won't work. We suggest you make these attributes dropdowns, and add the values you intend to use. This will give you one place to manage their values: if you have a typo, instead of editing each product, you just edit the attribute. This will also help staying consistent with Google requirements (see below) As an example, let's say you want to add a label named "season" to all your products:     a. Add a Magento attribute named Season, of type dropdown. (see Fig 1.17) Fig 1.17 Add a magento attribute [missing screenshot: add attribute.png] b. Add all your label values to the attribute: Winter, Spring, Summer, Fall. (see Fig 1.18) Fig 1.18 Add labels for the attribute [missing screenshot: add values.png] c. Add the Season attribute to all the relevant Attribute Sets. If you don't use Attribute Sets, you will still have to add it to the Default set.  Go to Catalog > Attributes > Manage Attribute Sets, pick your set from the list, then use Drag-and-drop to take Season from the right, and place it in one of the groups on the left. You'll have to do this for all relevant attribute sets. (see Fig 1.19) After this is done, you can edit your products and fill in Season values. Fig 1.19 Add new attribute [missing screenshot: add attribute to set.png] Add Custom Labels to the feed columns   To include the new attributes in the feed as custom labels, you will need to do the following:  Go to the feed settings, under Columns Map and add a new column,  Name it custom_label_0, and select the new attribute ("season" in our example). You'll only need to do this once.  Save and you're done! The new feed that generates overnight should include the new attribute. You can repeat these steps for up to 5 custom_labels. The attributes you set can have any value you'd like to use in AdWords.       Google requirements You can create up to five custom labels, numbered 0 through 4, for each item in your feed. You may submit one value per item for each custom label attribute. You should assign a specific definition for each of the five custom labels and specify the possible values for each. Then, you use these custom labels consistently across the products in your Merchant Center account, assigning appropriate values to each product according to your definition. Each of the five custom labels can have only one value per product. Source: https://support.google.com/merchants/answer/188494?hl=en Limitations You can only have 5 custom labels one product can have only one value per label, so in total, a product can only have 5 labels and you cannot group more than 1,000 products with the same labels. As custom labels are meant to allow grouping of items, only 1,000 unique values are supported for each custom label attribute across the items in your account. Products with a custom label submitted after the limit was exceeded won’t be included in product groups using this custom label. To correct the issue, update your product data to reduce the number of unique values for the custom label to less than 1,000. Source: https://support.google.com/merchants/answer/188494?hl=en Setting up Price Buckets Price buckets is a concept to help target campaign bids by product price ranges. I.e. products with price intervals: < $50 $50 - $100 $100 - $500 > $500 To set them up, you would need to define a set of rules under Adwords Price Buckets feed setting and insert a new custom_label_0 column and map it to the Adwords Price Buckets directive in the feed Columns Map.   Set up Google Inventory Inventory feed is needed for shops where products go out of stock quickly, or prices vary throughout the day. This feed aims to keep your products up to date in google merchant center. By submitting this update more than once per day, you'll be keeping in sync the following product information:  price and sale_price availability In order to submit inventory updates, first you'll have to Set up Google Shopping feed. Pre-requirements Setting up inventory feed requires a Google Shopping feed to be configured and submitted to google. Check the Set up Google Shopping page to set up one.  Similar to Google Shopping, Inventory feeds are recommended to be submitted through FTP Uploads, so if you haven't done it already, configure an FTP account in your merchnat account   Configure inventory feed Clone your Google Shopping feed, and edit the Columns Map and delete all comlumns but: id, price, availability, sale_price, sale_price_effective_date Update the schedule to generate the file around 3 times per day, or each 6 hours. For example if your products feed is schedule at 1AM, the inventory update should happen at 7AM, 1PM and 7PM. (see Fig 1.22) Fig 1.22 Update schedule     Submit the feed to Google Register the feed with Merchant Center Navigate to Feeds under merchant center and select + FEED button, than follow the steps to register it: Mode = Test,  Feed type = Online Product Inventory Update Target country - should math the one set for google shopping feed. Feed name - can be anything, but for consistency, name it the same way as you did in magento. (see Fig 1.23) Generate the feed Click the Run Now button in the feed feed management screen, and wait for the feed to complete. This will generate the feed file and also upload it to your merhcnat ceneter. Feed will process daily, so at this step you may also adjust the Run Schedule if you need to. Check our guide on Generating the feed for more details. Analyze results Once the feed has completed, go into the merchnat center and select the feed you just registered.   Check the number of item processed and see if there are any errors with processing. If there are errors, follow ourTesting and Troubleshooting section to help solve them.   Once you clear errors, register the feed live by redoing the step 1. only this time Mode = Live, and use the same feed_.txt file as used for the test one.     Fig 1.23 Register feed with Merchant Center Google Promotions Google Promotions program help you list the special offer link along with your products on Google Shopping. (See Fig. 2.1) Read Google's program requirements to see if your store can participate in this program. Prepare your Merchant Account Configure the feed Submit promotions feed to Google Troubleshooting Google promotions are configured along with a Google Shopping products feed. If you don't already have a products feed, follow set up Google Shopping guide and come back to this page. Prepare your Merchant Account In order to submit promotion feeds to google shopping, you'll have to apply for program participation, use this form to request it.   Fig. 2.1. Special offer Ad Configure the feed Add promotion_id column to you products feed.  Edit your Google Shopping feed and set a new column under Columns Map called promotion_id. (See Fig. 2.2) Fig. 2.2. Adding promotion_id column Configure the Google Promotions tab. Open the Google Promotions tab under the Google Shopping feed and complete the following: Set Enable Google Promotions = Yes Select the Include checkbox for the cart promotions you may want to send to google. Please read the program policies to make informed decisions on which promotion rules to include. Edit the Promotion Title and From/To dates for the enabled promotions to match google's editorial requirements. (See Fig. 2.3) Fig. 2.3 Adjusting included promotions Submit promotions feed to Google Register the feed with Merchant Center. Navigate to Feeds under merchant center and select + FEED button, then follow the steps to register it: Mode = Test,  Feed type = Promotions Target country - should match the one used to submit the Google Shopping Feed. Feed name - can be anything, but for consistency, name it the same way as you did in magento. (See Fig 2.4) Fig 2.4 Register new promotions feed Input method = Regular Uploads Promotions feed will be uploaded at the same time with your products feed, check your feed Schedule if you need to adjust when it would happen. File to be uploaded = promotion_.txt (See Fig 2.5) Replace the with the feed ID in magento, as it can be seen in the feed management screen. Fig 2.5 Upload settings Generate the feed The same way as you have uploaded the products feed, promotions feed will generate right after the products feed, and will be uploaded to you merchnat center.  Click the Run Now button in the feed feed management screen, and wait for the feed to complete. This will generate the feed file and also upload it to your Merchant Center. Once the feed is completed, check the status of your feed under your Merchnat Account. If it says it has been uploaded, check under Promotions tab to see your promotions listings. Troubleshooting Feed does not generate. Check feed's log and see if there's a permission error and fix it.  Check if cron is running.  If no errors and cron running, contact our support. Feed is completed but not uploaded.  Check the feed error log, and look for a line that looks like: INFO (6): Running preHook: google_promotions The next line under this should be specifying why feed is not uploaded: INFO (6): No changes in Promotions feed found Promotions feed has no changes from last generation, and as a result feed is not uploaded. If you need to submit it as a new promotion, you'll have to edit the feed configuration, under Google Promotions tab, and click the button Submit as new promotion. After that hit Save Config and regenerate the feed. (See Fig. 2.6) Next generation feed would re-upload ad a new promotion, having new promotion ids. Log entry should look like: Fig 2.6 Increment Promotion IDs   INFO (6): Recreated Promotions feed - added 2 lines   Shipping and Tax Both shipping and tax requirements depend on the feed's target country, please read Submitting tax & shipping google docs to understand what the requirements are for your feed. Tax setup Shipping setup Tax setup For most of the countries, value added tax needs to be included in the price. This is needed on product pages as well as in the price field in the feed. Exception to this rule applies to US, Canada and India stores.  To see the up to date list of restrictions please read google's Tax Policy.     Including tax in the price (non-US feeds) First make sure your products pages display the price including tax. You should check the setting under Admin > System > Configuration > Sales > Tax > Price Display Settings, should be set to Including Tax. The feed has to be configured to follow it by setting the price and sale_price columns in the Columns Map to the appropriate Price and Sale Price directives, having the option Add Tax = Yes. (see Fig 1.14) Fig 1.14 Include tax in the price [missing screenshot: price_tax.png] Explicit tax submission (US feeds) Define tax information by setting it up in the Merchant Account. Under Settings > Tax define the same tax rules you have running on your store. Another option to submit the tax is by creating a custom attribute on your products to hold tax information in google format, i.e. US:94114:8.75, then add the tax column to your feed under Columns Map and map it to the custom attribute you created.    Shipping setup Depending on the complexity of your store shipping definition, you can provide the rates to google in multiple ways.  Basic shipping methods: flat_rate, table_rates, free_shipping If your store is setup with one of those basic rates, you can include the shipping information in your feed by adding the shipping column to Columns Map and map it to the Shipping directive. Then, under the Shipping tab of the feed configuration, set the desired methods and regions to be included. The feed will automatically compute the rates based on your shipping methods definitions in magento, and provide the feed with the appropriate google shipping format. (see Fig 1.15)   Read more about what the shipping options are, under Shipping guide.  If for any reason the rates do not come through properly, you can always define them in merchant center instead of providing them through the feed. See guide on Merchant account-level shipping. Fig 1.15 Shipping methods [missing screenshot: shipping.png] Carrier calculated rates: UPS, DHS, FedEx Those rates cannot be computed through the feed, and those need to be setup in the Merchant Account under Settings > Shipping. Please follow the guide on Merchant account-level shipping. In order for account-level shipping rates to apply on your products, the feed should not include shipping, so make sure you have shipping tuned OFF under Shipping section of feed configuration.    Rates by individual product: i.e. free shipping items If your catalog includes a set of products that apply for free shipping, and the rest of the products have regular rates or carrier calculated rates, the setup has to be defined in both your merchant account as well as in your feed configuration as follows: Create a custom attribute for your products and call it for example custom_shipping_rate, then fill in your free shipping items with US::Free Shipping:0 USD, leaving this attribute blank for the other products. Map this custom_shipping_rate attribute to the shipping column in the Columns Map.  Set the catalog wide rates in the Merchant Account, similar to how it's defined for carrier calculated rates,  bullet 2. (see Fig 2.6) This setup has the following effect: the rates defined at bullet c) will apply for all products, but the ones having a value defined in the feed.  Another option for setting catalog wide rates from bullet c), is when you have basic shipping methods defined in magento and you don't want to define them in the merchant center. For this case you could fill in the appropriate rates in the feed by setting a replace empty rule under Product Filters section to replace empty shipping values with ones computed through the Shipping directive. Fig 1.16 Setup Rates [missing screenshot: empty_shipping.png] Enable automatic item updates Automatic item updates is a Google Merchant feature which improves pricing and stock information updates in Google Shopping. It uses microdata from your Product pages to maintain fresh price and availability info, by updating this several times a day.  Activating Microdata item updates on your feed config will add hidden microdata information on your store product pages. Make sure to clear cache and check your product pages to make sure they still render properly. Benefits Prerequisite Step-by-step guide Troubleshooting Benefits If you update prices during the day, regularly hold promotions and special offers, or have low-stock items that sell fast, then microdata will help you: keep prices, availability and condition fresh in Google validate your products in Google's strict pricing consistency rules improve user experience, traffic to your product listings, and higher conversion rates because users already see the correct price on Google Shopping In contrast, if you choose not to enable automatic item updates in your account, items with mismatched price and availability will be temporarily disapproved rather than updated. Prerequisite You'll need to have price and availability columns in the feed, these are enabled and set up by default. Step-by-step guide If you don't update prices more than once per day, you can still benefit from Microdata for stock information: Google will be able to see when a product goes out-of-stock, or back in stock, and mark it in Shopping. This will prevent item rejection due to mismatched stock info.     Activate Microdata item updates from System > Configuration > .Rocket Shopping Feeds > General (see Fig 1.20) Fig 1.20 Activate Microdata item updates 1. Activate Microdata item updates from System > Configuration > .Rocket Shopping Feeds > General 2. Enable automatic item updates in Google Merchant. (see Fig. 1.21)   Go to "Settings" in the left-hand menu, then "Automatic item updates" Click "Edit Settings" Check "Enable automatic item updates" Select "Price and Availability" and check "Also update items that are 'in stock' on my website but 'out of stock' on Shopping." Click Save changes   Fig 1.21 Enable automatic updates [missing screenshot: microdata_setup_merchant.png] Troubleshooting Google provides a handy tool to see what microdata is enabled on your product pages.  Just paste the URL to a Product Page and you should see all the items on that page with their respective price and stock status. → http://www.google.com/webmasters/tools/richsnippets Microdata missing? You should first verify that this particular product is included in the feed. if the product is not in the feed, then microdata may not appear correctly if the product is missing Stock and Price columns in the feed, then microdata will be missing them as well  and that all caches are cleared - you'll need to see a fresh Product Page for the new info to work. So a full clear of Full Page Cache / Block Cache / 3rd party Varnish caches will be needed before your product pages will contain microdata. The "Flush Cache Storage" button will clear all caches in a default Magento installation   If you use another extension that outputs microdata in the Product Page, you should consider disabling it, or removing price and stock info from its output. Our extension will always output the exact Product ID, availability, price and currency that you send in the feed - this is important for successful Google Merchant validation.     Feeds management Feeds management Accessing the feeds From store admin, access Catalog > Rocket Shopping Feeds to see the feeds management screen (see Fig 3.4)   Help with Adding a feed Generating the feed Testing and Troubleshooting Optimizing feed output Cloning a feed setup Migration to another magento Fig 3.4 Feed management screen   No heartbeat detected. Feeds won't generate, please check magento cron is running, If you see this warning, check step 5. Set cron script from Installation & upgrades. Once cron is installed it could take several minutes for this warning to clear.   Adding a feed Select the feed type From Rocket Shopping Feeds screen, hit the + Add New Feed button.  A new dialog window will open to let you choose what kind of feed you would like to add and set a name for it. (see Fig 3.5) The Feed Type dropdown only shows options available for your install. If you're not seeing the type you need, check whether it's available for purchase at  Xtension Galaxy. Fig 3.5 Adding a new feed     Review feed configuration By pressing the Continue button, the next step will be brought up, which lets you adjust feed output settings for your new feed.  For default output settings, just hit Save Feed to finish adding it, and continue the Getting started steps which correspond to the marketplace and feed type you have chosen. (see Fig 3.6) Fig 3.6 General Configuration Tab   Optimizing feed output The feed's quality depends on the quality of product data. To make sure that data in the feed is accurate, you'll have to adjust feed configuration to match your catalog. Use the topics below to get details on what configuration options are:  General Configuration Columns Map Categories Map Product Filters Product Options Configurable Products Grouped Products Bundle Products Shipping Run Schedule FTP Uploads Use our guide for Testing and Troubleshooting to help you out with tracking down issues with your feed.      Columns Map Feed Columns allows you to map any column to any product attributes, or to directives implementing special logic meant to follow marketplace specifications. Please check with the marketplace feed specifications to understand what the feed columns should be. The Column Map grid features the following: Order - allows you to define the columns order in the feed. Higher numbers go last.  Feed Column - is the name of the column. Map To - can be either Directive (first options in the dropdown), or a product Attribute.  Options - most Directives accept parameters that can be specified here.   Generally, it is recommended to associate directives (the first grouping in the dropdowns) to corresponding columns. Column names must be exactly as specified by marketplace provider. When feed is added, depending on the marketplace feed type, a set of columns will be added by default. You can change and add more columns as you see fit, to better match your catalog data onto merchant feed specifications. Save feed configuration ! Fig 4.4 Columns Map  Directives Directives are functions performing specific logic that can be applied in the Feed Columns. Some of them accept parameters, for example Price (add tax = yes/no), and some of them refer to a configuration from a different tab, i.e. Taxonomy By Category (Categories Map). Navigate through the list below to learn what their logic is. Static Value  This directive can be used to set a string value for all your products. The parameter accepted is a string value. Most of the times when all your products have the same constant information, you would want to use this directive instead of setting the same value in an attribute for all your products. One good example is setting the brand information for stores selling only products of the same brand.  In the default set of columns, condition is set to be new using this directive. (see Fig 4.5) Fig 4.5 Static Value [missing screenshot: d_static.png] Product Id Primarily this directive will output the product entity_id, and accepts as parameter Add Store Code Yes/No.  For multi-store, ids must be unique across all feeds, and to make them unique, you have the option to concatenate the product id and the store code together.  (see 4.6) Fig 4.6 Product Id [missing screenshot: d_product_id.png]   Item Group ID The output of this directive is a unique string which depends on your products setup. For associated configurable product that vary by one of the columns: color / material / pattern / size, It would output a unique string through all variants composed using the Parent SKU and other varinat attributes. Those columns would have to be mapped in the Column Map. For all others products it will output empty.   Most common usage for this directive is to output google's item_group_id column. This directive is designed to make variant products appear as they are separate products in case one of the configurable attribute varies and is not part of the color / material / pattern and size, set. For example if you have a pair of jeans that vary by size and fit, you would want to have Slim and Regular as different products even if all variants are part of the same configurable parent. The item_group_id would be : SKU1-slim SKU1-regular and each of them would have different sizes.  The directive is doing this by concatenating variant attributes values other than color / material / pattern or size to the Parent product SKU, in such way that they are unique per size.  The output limit is at 50 chars, so computed values longer than that will be hashed to fit inside the limit. Ex: SKU1-786a0b21a65459150fb60e24f2e9be0c2e6904c4 78313ee4cabb3a9d6de8e3948d3de4cd6044400f Fig 4.7 Item Group ID [missing screenshot: item_group_id.png] This directive is not helpful if your items don't vary by at least one attribute from Google's supported list: ‘color’, ‘size’, ‘pattern’, ‘material’, ‘age group’, ‘gender’, ‘size type’ and ‘size system’. In this case, Google recommends removing the "item_group_id" column completely: https://support.google.com/merchants/answer/6231538  All Directives Static Value Product Id Item Group ID Product URL Product Image URL Product Category Image URL Toybanana External Image URL Product Additional Images URLs Product Image URL 360_Magic Product Additional Image URL 360_Magic Price Sale Price Sale Price Date Range Availability Inventory Count Product Expiration in Feed Shipping Shipping Weight Variant Attributes (Apparels) Product Options Adwords Price Buckets Product Review Average Product Review Count Product Type using Magento Category Path Taxonomy By Category Identifier Exists Concatenate Is Bundle Product URL Processes product urls so that they match the type of product and listing in the feed. Set the additional parameter Add URL Suffix to further customize the end of a product URL with custom string. The suffix can be used to track referring URLs in web analytics software. Setting this to ?utm_source=google_shopping will generate links like: http://mystore.com/product-url.html?utm_source=google_shopping. Products without assigned categories will not use the SEO friendly version of the URL. Configurable associated products can append to this URL parameters to target their specific variant, see Unique urls for associated products not visible setting under Configurable Products section of the feed config. (see Fig 4.8) Fig 4.8 Product URL [missing screenshot: d_product_url.png]   Product Image URL Simply pulls the product's main image URL. Allows the option to set under the Type parameter, which images is the main image, by default it's set to Base Image. If your product does not have an image assigned as the Base Image, your product may be skipped if "image_link" is under "Skip product with empty". If you notice problems, try removing it from skip rule. (see Fig 4.9) Fig 4.9 Product Image URL [missing screenshot: d_image_url.png]   Product Category Image URL Returns category image of the first category assignment found for your product. This should only be used for special cases where product images are defined on the category level. (see Fig 5.0) Fig 5.0 Product Category Image URL [missing screenshot: d_category_image.png]  Toybanana External Image URL Returns the value of product's "image_external_url", which comes packed with Toybanana_ExtImages extension. If you do not have the extension, you can simply create the image attribute and fill in the data for products. (see Fig 5.1) Fig 5.1 Toybanana External Image URL [missing screenshot: d_toybanana.png] Product Additional Images URLs This directive outputs a comma separated list of active image URLs for the product. Under the Exclude Type parameter should be set to the main image of the product, so that only the rest of images are added through this directive. (see Fig 5.2) Fig 5.2 Product Additional Images URLs [missing screenshot: d_additional_images.png]   Product Image URL 360_Magic This directive outputs the main image managed by MagicToolbox_Magic360 extension. Under the Main Image no (0001) parameter can be specified which number of the image is the main image used with that extension. (see fig 5.3) Fig 5.3 Product Image URL 360_Magic [missing screenshot: 360_image.png]   Product Additional Image URL 360_Magic This directive outputs other images managed by MagicToolbox_Magic360 extension, up to 10 images in a comma separated value. Under the Main Image no (0001) parameter can be specified which number of the image is the main image used with that extension so it can be excluded from the list. (see Fig 5.4) Fig 5.4 Product Additional Image URL 360_Magic [missing screenshot: 360_alternate_image.png] Price The price directive aims to match the price displayed on the product page, so it takes into account currency conversions, tax, promotions, MSRP and eco tax. Configurable, bundle and grouped items will have the minimal price of an item. Setting Add Tax option below to Yes will add tax to this price column, for US all prices should not include tax, the appropriate setting should be made here. The price output includes the currency information. Msrp price is used in this directive when the product has msrp enabled and that value is bigger than the price itself, forcing Sale Price directive to display the regular price. For products that have qty increments active, it will multiply the amount with the minimum number of items to purchase. (see Fig 5.5) Fig 5.5 Price [missing screenshot: d_price.png] Sale Price This directive will output the lowest value for which the product can be purchased at. It computes the Special Price of the product, and any catalog promotion rules according to the Apply Catalog Price Rules setting from  General Configuration section. Setting Add Tax option below to Yes will add tax to this price column, for US all prices should not include tax, the appropriate setting should be made here. When Msrp is enabled, the value of regular price is used here if there are no running promotions at a lower value. Similar to Price directive it takes into account the qty_increments set for the product. (see fig 5.6) Fig 5.6 Sale Price [missing screenshot: d_special_proce.png] Sale Price Date Range The date interval is taken primarily from the product's Start / End dates of the special price. This interval will never output empty, so when no end date is specified for the product, the range will be set for a full year. If the start date is not specified on the product, the current processing date is  considered.  This date range is mostly useful in the feed along with the Sale Price, specifying when this sale apply. (see Fig 5.7) Fig 5.7 Sale Price Date Range [missing screenshot: d_sale_date_range.png] Availability Uses regular magento stock information to compute whether a product is on stock or not. When the additional setting Use default Stock Statuses is set to No, a custom attribute specified under Alternate Stock/AvailabilityAttribute, will be used to specify the availability. See more settings under General Configuration section. Accepted values for this directive are: 'in stock', 'out of stock', and 'preorder'. Other values will be replaced by 'out of stock'. (see Fig 5.8) Fig 5.8 Availability [missing screenshot: d_availability.png] Inventory Count Simply pulls the stock inventory qty information. The Count Mode defines how the qty count should be performed in case of complex products like bundle. (see Fig 5.9) Fig 5.9 Inventory Count [missing screenshot: d_inverntory.png] Product Expiration in Feed Computes an expiration date based on product creation and the "No. of Days" option below. Set "No. of Days" option to increase or decrease this date limit. (see Fig 6.0) Fig 6.0 product Expiration in Feed [missing screenshot: d_expiration.png]   Shipping This directive computes shipping information into accepted format, based on the shipping methods available for your products. To use this directive, Shipping section has to be  configured on your feed. To specify which Shipping Methods and which regions will be considered please review Shipping section. (see Fig 6.1) Fig 6.1 Shipping [missing screenshot: d_shipping.png] Shipping Weight Outputs the weight attribute of your products along with the unit of measure specified here under options. For bundle products, there's an extra setting called Combined weight found under the Bundle Products section. (see fig 6.2) Fig 6.2 Shipping Weight [missing screenshot: d_weight.png] Variant Attributes (Apparels) Allows for using multiple product attributes to specify a different value systems for the same property. It comes handy to map apparel specific properties.  Example of size property:  shirts - shirt_size attribute, with values: Small, Large, X-Large, etc shoes - shoe_size attribute, with values: 8, 9, 10, etc Using this directive you can select both attributes, and when processing the product, the appropriate value will be considered depending on whether a value is specified in one of the attributes. First attribute found having a value for the product is been used. For configurable items, all values will be computed into a list of values delimited by comma, or a delimiter specified under Associated Product Attribute Value Separator setting under Configurable products section of the config. (see Fig 6.3) Fig 6.3 variant Attributes (Apparels) [missing screenshot: d_variant.png] Product Options This directive is used to output values of product custom options. This directive is used for apparel catalogs which hold the color and size variations as custom options instead of having those properties as configurable products items. It takes as argument the list of custom options names which should hold the values needed for the column you're setting up.  Each custom option in the argument has the number of products affected in the right (x).  (see Fig 6.4) The output of this directive also depends on how the Product Options section is configured, and it can be a list of possible values as comma separated, or it can be a single value in case the products is set to detail each options combination as separate row in the feed.  Fig 6.4 Product options[missing screenshot: product_options.png] Adwords Price Buckets This directive uses a set of rules defined under Adwords Price Buckets settings to output labels for different price ranges of your products.  A common usage is to add the google custom_label_0 column which is handy to group your products when running AdWords Shopping Campaigns. (see Fig 6.5) Fig 6.5 Adwords Price buckets [missing screenshot: d_buckets.png] To specify the upper limit of your prices, just use some big number like 99999999. See below example image. Fig 6.6 Adwords Price buckets [missing screenshot: d_buckets_1.png] Product Review Average Output product's average rating in the interval 1 - 5. Returns 0 if no reviews have been approved on your product. (see Fig 6.7) Fig 6.7 Product review Average [missing screenshot: d_review_average.png] Product Review Count Outputs the count of product reviews. Returns 0 if no reviews have been approved on your product. (see Fig 6.8) Fig 6.8 Product Review Count [missing screenshot: d_review_count.png] Product Type using Magento Category Path This method is the default way of filling a categorised column of your products that can be used to fill product_type.  Your product category paths are converted into a string revealing the hierarchy like: Root > Categ A > Categ B. Product been assigned to Categ B. All product categories will be used to build a list of comma separated paths, and they are limited to the Paths limit value. Categories are matched in order of priorities defined under category Map, if no priority values are defined, it will just match them the order found in the database. (see Fig 6.9) Fig 6.9 Product Type using Magento Category Path Taxonomy By Category  Uses a set of rules defined under the Map Taxonomy by Categories setting to output category taxonomies. (see Fig 7.0) Fig 7.0 Map Taxonomy by Categories Products will be matched through the set of rules using their assigned categories. The first category found with the most important category rules below will be considered. The rule importance is given by the Order rule column, lower values matching first. Product categories do not necessarily need to have a direct correspondent rule to cover products deeper in the tree.  High level categories set here would dictate inheritance for products deeper in the category tree. (see Fig 7.1) Fig 7.1 Map Product Categories to Taxonomy The more categories defied here, the granular your taxonomy definition becomes giving google a better and detailed view of your products.  We recommend that you set all rules with an order value. Setting higher Order values for high level categories, and lower Order value for deeper categories will make deeper categories will match first, dictating the output value. It is advise to also set a Replace empty values rule to cover all missed categories from this set, and fill the values with a static default taxonomy or some product attribute holding the taxonomy.  Identifier Exists This directive looks at your feed identification columns and checks for values. Default identification columns are: brand, mpn, gtin, and returns FALSE if brand or any of the mpn or gtin is missing, returns nothing otherwise. You you choose to customize the identification columns as a parameter, it will return FALSE if one of the columns is missing, otherwise returns nothing. (see Fig 7.2) Fig 7.2 Identifier Exists Concatenate Allows you to compose a string using attributes of your products or other column values. (see Fig 7.3) Fig 7.3 Concatenate [missing screenshot: d_concatenate.png] Use product attributes in this format: {{attribute_code}}. Attribute codes available for your products can be looked up under Catalog > Attributes > Manage Attributes. To use other column output in concatenation use the same format: {{column_name}}, and make sure the column is defined in the column map, and it is not mapped to another concatenation directive.  This method works like a replace in string function, and looks for the {{}} marker through the string template to replace it with the attribute or column value as specified. The following placeholders will inherit values as defined in the 'Fetch ... from' settings from Configurable Products and Grouped Products configuration sections: {{name}} {{description}} {{url}} {{image}} If all placeholders bring an empty value when computed, the column output itself will be empty. For example if the template is: Concatenate of {{name}} and {{size}} and {{name}} and {{size}} values in product are empty, the Directive will return empty string. Those values can be caught using Product Filters - Replace.  Is Bundle Outputs TRUE if the item is a bundle item and FALSE otherwise. (see Fig 7.4) Fig 7.4 Is Bundle [missing screenshot: is_bundle.png] Categories Map This map works as a product filter by categories, also taxonomies defined here output through Taxonomy By Category under Columns Map. Feed Localization Set the Feed Localization to match target country locale. Your product titles and descriptions should also be in this language.  Changing the language here affects the language of taxonomies, and autocomplete under Map Product Categories to Taxonomies depends on choosing the language first.  Note, this setting does not affect price formatting. Price formatting depends on what is set for your store under System > Configuration > Locale Options > Locale. (see 7.5) Include Products w/o category This setting aims to filter products that are missing categories in your catalog. It's complementary to category filter checks from Map Product Categories to Taxonomies. If you do include products without categories, note that they will be missing taxonomies, so to set a default taxonomy for those, set a Replace Empty rule. (see 7.5) Categories priority mode Defines how the Priority values defined for each category in the widget are used when matching them. Priorities are used in certain directives to differentiate which categories matter most for products assigned to multiple categories. For instance priorities are been used with directives like Taxonomy by Magento Category, Type by Magento Category or Type by Magento Category Path. Higher priority values are matched last. Fig 7.5 Categories Map Map Product Categories to Taxonomy Taxonomies defined here output using the Taxonomy By Category directive in the Columns Map. Use the checkboxes and deselect categories you do not want to include in the feed. Use the input reading "Type at least 3 characters" to fill in taxonomies using an autocomplete list. (see Fig 7.6) Fig 7.6 Map Product Categories to Taxonomy Use the arrows to expand the category tree, and try to find deeper taxonomy path for each category.  Save feed configuration ! Product Filters Product filters section mostly allows you to filter out products you don't want in the feed, but also replace values generated with Columns Map definition.  Allow Out of Stock This filter is applied to standalone simple products or configurable products. Associated simple products have other rules defined in "Configurable products" and "Grouped products"  Submit only products of these types  You can specify by store what types of products should be included in the feed.  Adding configurable or bundle types will actually pull also associated simple products if it's specified in the Configurable products or Apparel sections. Custom product types like AheadWorks subscription types will do fine.   Submit only products that have these attribute sets   If you want to include All Attribute Sets, you can select only the first option; selecting the first option along with a few other sets won't include all sets.               Replace empty values This set of rules has similar function as Columns Map, the only difference is that columns defined here have to exist. Make sure you save your column map first. This setting gives the opportunity to stop the feed from delivering empty columns when products are lacking respective data. You can set your empty data to be replaced with Static Values or any other regular Directive or Attributes. The rules defined here will be applied last in the catalog processing, right before the output, and they will be applied in the order defined by Order column in this grid. You can actually define cascading rules for the same column to minimize the risk of having empty values in the feed. (see Fig 7.7) Fig 7.7 Replace empty values [missing screenshot: replace_empty.png] Find and replace The find & replace will apply at column output, similarly how replace empty values does. The more rules you apply the slower your feed will be, not recommended for large catalogs. (see Fig 7.8) Save your columns before adding rules here!  Fig 7.8 Find and Replace [missing screenshot: find_replace.png] Skip product with empty If you want to avoid entries in the feed with empty values, you can skip them here.  This filter comes predefined with required columns for a google shopping feed: id, image_link, link and price. Any product, having any of the columns defined here empty, would be skipped. This filter will apply at the end of Replace empty values rules, so that products with values from replace empty rules would still be in the feed.  If you can't find your column in the dropdown, it's because you haven't saved the new feed columns after the column has been added. A Save should solve it. (see Fig 7.9) Fig 7.9 Skip product with empty [missing screenshot: skip_empty.png] Adwords Price Buckets This section allows you to define a set of rules to label your products based on price intervals, which will be mapped using Adwords price Buckets directive. To specify the upper limit of your prices, just use some big number like 99999999. See below example image. (see Fig 8.0) Fig 8.0 Adwords Price Buckets [missing screenshot: d_buckets_1.png] A common usage is to add a custom_label_0 column which is handy for running campaigns. (see Fig 8.1) Fig 8.1 Adding a new column[missing screenshot: d_buckets.png] Product Options Current version of the feed extension supports Custom Options for Simple products, and not for complex products like configurable or grouped. This section is handy when your catalog has apparels that hold size or color properties as product Custom Options, which may have different pricing or different SKUs. (see Fig 8.2) In order for your custom options to be added in the feed, you'll have to use the Custom Option directive in your Columns Map definition. Fig 8.2 Example of custom options product [missing screenshot: options_example.png] In case the catalog contains both apparels as simple products with custom options, and configurable products, the recommended setup is to have size and color columns set in the Columns Map as Product Options directive. This will process custom options. Then under Product Filters, set a Replace Empty rule for size and color columns to map on Variant Attributes directive. This will process configurable attributes. (see Fig 8.3) Fig 8.3 Example of using the Product Options directive in the Columns Map. [missing screenshot: options_map.png] How to add product options There are two ways you can process those products into the feed:  One row, having options concatenated into the column output. Multiple rows, one for each option combination In case the One row option is selected, the output is one row having all option values as comma separated. I/e/:  color = red, blue size = S, M If the multiple rows is set, the output is a row for each options combination. I.e. color = red, size = S color = red, size = M color = blue, size = S color = blue, size = M   Multiple rows only for products in those categories This option lets you select which of the product categories should be treated as apparels, so those will be added as multiple rows in the feed with respect to custom options. The rest of the products will simply have comma separated option values. (see Fig 8.4) Fig 8.4 Adding product options [missing screenshot: options.png] Configurable Products  How to add associated products (see Fig 8.5) This option specifies how configurable associated items will be processed. It has three options: Only parent / No associated products No parent product / Only associated products Both types - parent product and associated products The recommended option for a google shopping feed is to use the option No parent product / Only associated products, which would list all associated items of the products but miss the configurable itself.  In order for this option to work, configurable type has to be selected under the Submit only products of these types under the Product Filters section, regardless of the option you choose here. Fig 8.5 Configurable Products Tab Allow out of stock This option can filter out associated items that are out of stock, regardless of what's been set under Allow Out of Stock setting from Product Filters section. The goal is to allow you to remove out of stock associated items even if you want to include regular out of stock products.  Inherit parent Out of Stock Status Dictates how the parent configurable item will behave when all associated items of a configurable are out of stock, the configurable itself will become out of stock. It will not do the same for in stock items.    Unique URLs for associated products not visible  When associated products are not visible in catalog on their own, they are accessed through the configurable item URL, making it hard to tell which products we're targeting. Activating this option will append extra parameters to the URL, making it unique.  Ex: http://example.com/configuable.html?color=123&size=99 When accessing this kind of URL, there's a special JavaScript logic on products page automatically selecting drop-downs or radio buttons to reveal the intended product details: image, price, etc.  Associated Product Attribute Value Separator  When parent products are added to the feed, the variant information like color and size is been composed using all possible values that their associated items could take. To list all of them, a separator is been used, and it can be specified here.  Ex: color = blue, yellow, brown  This option only works for columns using the Variant Attributes directive in the Column Map. Fetch title from Tells where to grab product name of associated items when they are included in the feed. Has the following options: Parent only Associated only  Associated if exists, otherwise from parent Parent if exists, otherwise from associated The recommended option Associated if exists, otherwise from parent should cover most cases of configurable product setup, doing a failover to configurable parent when no value is found on the associated item itself. Fetch description from Tells where to grab description of associated items when they are included in the feed. Same options and conditions apply as for the Fetch title from setting. Fetch URL from This allows you to dictate which URL to present to associated item with depending on it's status in the catalog. Has the following options: Parent only Associated if visible in catalog, otherwise from parent In most cases grabbing the parent URL is enough, but when the associated items are also visible in catalog on their own it's probably best to use their own URL so that the appropriate product information is displayed on the page when accessed. Fetch image from Tells what images should be used when associated items are included in the feed.  Has the following options: Parent only Associated only  Associated if exists, otherwise from parent Parent if exists, otherwise from associated Most of the times the images are set directly to the configurable item and those are sufficient, but sometimes when you want to feature out some variant characteristics, you would set individual images on the variant items. Some stores are using extensions to bypass default Magento behavior when it comes to Configurable Product Price (CP Price). It shows Associated Simple Configurable Product Price (Associated SCP Price) instead of Configurable Product Price.   Grouped Products How to add associated products (see Fig 8.6) This option specifies how items of grouped products will be processed. It has three options: Only parent / No sub-items No parent product / Only sub-items Both types - parent and sub-items In order for this option to work, grouped type has to be selected under the Submit only products of these types under the Product Filters section, regardless of the option you choose here. Fig 8.6 Grouped Products Tab Allow Out of Stock (see Fig 8.6) This option can filter out sub-items that are out of stock, regardless of what's been set under Allow Out of Stock setting from Product Filters section.  Price Type (see Fig 8.6) Defines how the price of the grouped product will be computed. It can be: Minimal price Sum of associated product prices Minimal price is the lowest associated product price. Sum of associated products prices is the default quantity of each associated product multiplied with the price of the associated product and then summed together.     Fetch title from (see Fig 8.6) Tells where to grab product name of associated items when they are included in the feed. Has the following options: Parent only Associated only  Associated if exists, otherwise from parent Parent if exists, otherwise from associated The recommended option Associated if exists, otherwise from parent should cover most cases of grouped product setup. Fetch description from (see Fig 8.6) Tells where to grab description of associated items when they are included in the feed. Same options and conditions apply as for the Fetch title from setting.   Fetch URL from This allows you to dictate which URL to present to associated item, depending on it's status in the catalog. Has the following options: Parent only Associated if visible in catalog, otherwise from parent In most cases grabbing the parent URL is enough, but when the associated items are also visible in catalog on their own, it's probably best to use their own URL so that the appropriate product information is displayed on the page when accessed. Fetch image from (See Fig 8.6) Tells what images should be used when associated items are included in the feed.  Has the following options: Parent only Associated only  Associated if exists, otherwise from parent Parent if exists, otherwise from associated Most of the times the images are set directly to the grouped item itself, but sometimes when you want to feature out some variant characteristics, you would set individual images on the sub-items. Unique URLs for associated products not visible (See Fig 8.6) Activating this option will append extra parameters to the URL, making it unique and indicating the product we want to point out. Ex: http://example.com/grouped.html?prod_id=123 When accessing this kind of URL, there's a special JavaScript logic on product page automatically, selecting drop-downs or radio buttons to reveal the intended product details: image, price, etc.   Bundle Products How to add option products (see Fig 8.7) This setting dictates how items that make up the bundle will be processed into the feed. Has the following options: Only parent / no sub-item No parent / only sub-item Both types / parent and all sub-items Most of the times you would want to output all the items making the bundle, but there are some cases when you may want to output them as a single product. Fig 8.7 Bundle Products Combine weight (see Fig 8.7) Bundle items can be defined as Dynamic or Fixed weight. This feature overwrites the bundle definition and goes for Dynamic weight by computing weight as sum of all sub-items. This option applies to the output of Shipping Weight directive from Columns Map.       Shipping The configuration section fine tunes the output of Shipping directive from Columns Map. Make sure you add a column called "shipping" and map it to the Shipping directive. The options here help on constructing the output format required by marketplace provider. The address used in rates computations is being pulled from Shipping Origin under System > Configuration > Sales > Shipping Settings > Origin. Make sure that address is set correctly. Methods (see Fig 8.8) Lets you choose which of the shipping methods you would want to apply on your products in the feed. Only table rates and static shipping methods are available for use here. Fig 8.8 Shipping Tab      Countries (see Fig 8.8) This option should correspond to the feed's target country. Though you are free to choose multiple countries here, usually only one country per feed is used. Only Minimum Price (see Fig 8.8) If more than one method applies, you can output only the smallest rate from those that apply.  Only Free Shipping (see Fig 8.8) When more than one rate applies to the same product, and one of them sets free shipping, you can output Free Shipping alone by having this option turned on. Add Tax to Shipping Price (see Fig 8.8) Will include tax rate calculation if it applies to the shipping rate. Most of the times - and especially for US feeds - this should be off.    Run Schedule Run schedule helps you generate your feed daily to keep your products up to date with the marketplace provider. In order for the schedule to work, your server needs to have the cron.php set. Check Installation & upgrades for details. You may generate the feed more than one time per day, by adding multiple schedule rows, use Add Schedule button to create a schedule. (see Fig 8.9) Start At Schedules are processed daily and will start generating the feed at the hour defined in start at dropdown. Batch Mode Specifies whether all products will be processed at once, or in several batches. The number of batches required to complete processing all products is determined by dividing total number of products by Batch Limit. Batch Limit Sets the number of products which will be processed in one batch.  The batch mode should only be turned on for large catalogs (>10.000 products), and only if the memory limit is not enough to process all your feeds in one go. Batches are processed one after another till all products are processed, with a small delay between batches given by the cron.php frequencies.  If by any chance the memory limit is reached for a schedule, the batch mode will automatically be set and batch limit calculated based on the number of products processed so far.   If you define FTP uploads for your feed, whenever the feed processes, it will also upload the resulting file on all FTP accounts defined. In case of batch processing, the file will only be uploaded when the feed file completes. Don't forget to Save Config ! Fig 8.9 Run Schedule   FTP Uploads FTP accounts defined here are used to upload the feed file whenever it completes to an account created with a marketplace provider. Uploads happen based on the Run Schedule or whenever you generate the feed manually. (see Fig 9.0) In order for the uploads to work, your server needs to have the cron.php set. Check Installation & upgrades for details. Check with the marketplace provider if FTP account is available for uploading the feed file, and if it's not available you can still hand them the file which is web accessible.  To create a schedule use the Add Account button and fill in the fields:  Mode It is recommended to use SFTP whenever is available. Host Do not put in the protocol prefix, i.e. ftp:// Port For ftp the regular port is 21, if not specified otherwise.  Username & Password Is the login for the ftp account. Upload Path This field is only visible for generic feeds, and usually, it is not required. It is the relative path to the directory where the file should be uploaded.  Click the Validate button for each account you add, and once the account validates, don't forget to Save Config. Fig 9.0 FTP Uploads     Generating the feed Feeds will generate automatically based on their Run Schedule, but if you need to manually generate a feed you could use the Run Now button in the feeds grid. Manual run Go to feeds management screen and click on Run Now in the actions column, and the feed will be scheduled for the next cron run (usually in 5 min).  During this time the status of the feed will read PENDING. (see Fig 3.7) Fig 3.7 Run feed manually   Scheduled run In the feeds management screen, the Run Schedule column shows the time(s) when the feed will start processing. When the scheduled time comes, feed will automatically go into PENDING status, and will start processing with the next cron run. If you wish to change the schedule, click on the schedule link, or follow Run Schedule guide. (see Fig 3.8) Fig 3.8 Schedule feed to run No heartbeat detected. Feeds won't generate, please check magento cron is running. See possible solution on how to detach feed generation from magento cron. If you see this warning, check step #5 Set cron script from Installation & upgrades. Once cron is installed it could take several minutes for this warning to clear.   Once the next cron runs (5 min), the feeds will start processing one by one, showing their progress with a percentage status. I.e. 10%, and under the Feed File, information about how many products where processed is displayed along with a link to download the feed file. When the feed completes processing, the status will display COMPLETED.  If there where errors in processing the feed, status will display ERROR, and a detailed messages list about the errors can be found by clicking View Logs. Check Testing and Troubleshooting for more information on how to solve issues.      Testing and Troubleshooting By Product Troubleshooting by product is the fastest way to correct output: Test output of a product Correct configuration and start over. Full Feed To track down issues through your full feed:  Generate the feed Check feed logs and feed output by accessing the feed file URL.  Submit the feed file to marketplace and check feedback. Correct configuration and start over. Testing output of a product In the feeds management screen look for the Test feed button on a feed row. A similar button is found in the feed configuration screen. (see Fig 3.9) Fig 3.9 Test feed button Using the Test Feed button, a dialogue will open, asking you to input the product's SKU or ID. Fill in the SKU and hit the Test Feed Now (see Fig 4.0) Fig 4.0 Test feed dialog The feed output will be displayed in a table where each row will represent a feed column and the value for the tested product. If the value of the product for a column is not what you were expecting, check the following: You are using a correct attribute / directive in Columns Map. You are not using Product Filters the wrong way. The Product has the correct data saved. At the bottom of the product output there's also a snippet of the logs generated for this product, there will be logged any skipped products in case of complex products like configurable, bundle, etc. (see Fig 4.1) Fig 4.1 Feed output Check Logs Logs are created by default, make sure the [magento_root]/var/log directory is writable.     Checking logs is useful to spot unintentional skipped products, or to see the reason why the feed failed processing In the feeds management screen, click on View Logs link for feed. This will open a new window where you can see logs of today's processing. If you need to see previous process logs you'll have to download the full log, use the Download Log button. For a clean test, you should use the Clear Log button before processing the feed. This way only entries from last processing will be shown. (see Fig 4.2) Fig 4.2 Feed log How to read logs lines Each log line starts with date & time, and they are ordered chronologically. Batch ID XXX, acquired lock. Offset 0, Limit 50  Your feed is being processed in batch mode (in packs of products, 50 products per generation, from given offset) product id 399 product sku hde012, skipped - REASON  The product is skipped because one of the product rules/limitations. Check Product Filters {{Skip Products with empty}} section Items: 88 added, 0 skipped | in file /path/to/magento/root/media/feeds/feed_ID.txt  The info line which gives you information about how many products were added/skipped.   Cloning a feed setup Cloning a feed would help to create a copy of one of your feeds which you can then modify. This would save time in creating similar feeds in terms of feed configuration. The type of the feed cannot be modified on a clone. Cloning can be a handy tool in the following situations: Set same feed for multiple stores If you have multiple stores, each with it's own language, you would want to create a feed for each of them. After cloning a feed, change the Store View and Feed Currency under General Configuration, and if appropriate, adjust Feed Localization under Categories Map.  Try out different feed configs for same store After cloning the feed, you can change the configuration of the clone and Generating the feed or Test the feed by a representative SKU, then compare it to the original feed.         Step-by-step guide Clone existing feed From Rocket Shopping Feeds grid, select the checkbox at the beginning of the row for the feed you want to clone and select action clone in the dropdown of grid Actions. Click on submit button to complete the action. (see Fig 9.1) Fig 9.1 Clone existing feed     Modify and generate the new feed After cloning, a new row will appear in the grid. The new feed has the same name but suffixed with the word (cloned). The clone's schedule will be moved to +1 hour from the original feed so that they do not overlap when processing. You can now modify the clone configuration by using the configure button on it's row, or you can Run the feed. (see Fig 9.2) Fig 9.2 Feed table       Migration to another magento Easy migration is useful to push live feeds that where tested on a staging magento instance.    Destination magento instance should have the same feed extension version installed.   To check hte extension version navigate to Admin > System > Configuration > Rocket Web Extension > General > Installed Extensions. Export feed configs.  This needs to be carried out on staging (source) where your feeds have been configured.Navigate to feeds management screen and select the feeds you want to migrate from the grid, then click the Export button at the top of the grid. An xml file containing feed configuration is prompted for download. (see Fig 9.3) Fig 9.3 Export feed configs   Import the XML. On the target magento (live), click the Import button at the top of feeds management screen. A screen will come up asking you to Select File to Import, where you will upload the file previously downloaded from staging. Next, click the Import Data button to complete the action. (see Fig 9.4) Fig 9.4 Import XML   To validate the migration, generate the feeds you just imported and compare the output with the one on staging.  General Configuration   Store View Product information may vary by store view, and setting the store view here will make the feed to pull product information in corresponding store context.  If you have multiple stores targeting different countries and languages, you may want to create a feed for each of those stores.  When you change the store view, Feed Currency should be set to the default displayed currency for that store. (see Fig 4.3) Feed Currency Allows you to choose which of the allowed currencies should be used when calculating prices. If Feed Currency is different from the Display Currency of that store, prices will be converted to the appropriate currency.  We recommend setting the Feed currency to match the display currency, so the feed and the product pages will display the same price.(see Fig 4.3) Feed Path "Feed path" is relative to the web root like: [magento_root]/media/feeds/ but you can set an alternate save path. Make sure the feed path has enough write permissions for both web server’s user and cron user if they are different. Ask your web hosting company for help if needed. File will have the following file name format: feed_[id].txt and it will be displayed in the feed grid once the file is generated. (see Fig 4.3) Apply Catalog Price Rules Whether to include Magento catalog rules when computing prices on products. This has direct influence on how the Sale Price is being computed, in addition to product Special Price attribute, when this option is set to yes, promotions will affect whether Sale Price gets populated or not. (see Fig 4.3) Use default Stock Statuses By default, it is set to yes, using regular Magento stock information to compute whether a product is out of stock or in stock. When it is set to No, it will allow you to specify a custom attribute which has to hold valid values for stock status, this can be found under Alternate Stock/Availability Attribute  setting. The attribute's values can be: 'in stock', 'out of stock' and 'preorder'. Other values will be replaced by 'out of stock'. (see Fig 4.3) Max Length of Title and Description Title and Description max length for the products are limited in Google Data to 70 and respectively 1000 characters. Those settings allow you to change the values if needed. (see Fig 4.3) Fig 4.3 General Configuration How-to articles How-to articles Title Creator Modified Setting up products with Minimum Advertised Pricing Dorin Mirulescu Jan 29, 2016 Use pricing from simple child products Dorin Mirulescu Jan 29, 2016 Set up stores and feeds for multiple countries Dorin Mirulescu Jan 29, 2016 Migration to another magento Dorin Mirulescu Jan 29, 2016 Testing and Troubleshooting Dorin Mirulescu Jan 29, 2016 Optimizing feed output Dorin Mirulescu Jan 21, 2016 Use pricing from simple child products     If you use configurable products and have different pricing for each option, then you might want to set prices on the Simple products associated with your configurables. By default, Magento will use the price you set on the configurable product, for all pricing: normal, special price, tier price etc. If you want to set different prices for more expensive product options, you have to go to the "Associated Products" tab of the configurable product, and set extra pricing for the options, that will get added to the configurable price - see more details in the Magento documentation. Supported extensions To use this feature, your store needs to have one of the following extensions: SCP Simple Product Pricing Step-by-step guide The default Magento setup described above may prove tedious if you have many different prices. Instead, you can choose to disregard the price of the configurable product, and use "price" and "special price" from the simple children. You need to install one of these two extensions: SCP http://www.magentocommerce.com/magento-connect/simple-configurable-products.html Simple Product Pricing http://www.magentocommerce.com/magento-connect/simple-product-pricing.html Installing these extensions will affect your live site - all prices for configurable products in catalog and checkout will be changed to use prices set on the simple children only! All configurable pricing in the website and shopping feed will now be meaningless; you need to set price (and special price if needed) on each simple product You don't need to configure anything else; just re-generate the feed and the new pricing will be in place simple children will have their own separate prices if you include the configurable in the feed, it will have the minimum price from its children, but it's own special price   Setting up products with Minimum Advertised Pricing It's recommended that MSR price display is set in magento to the real price aside msrp on the pages. The most appropriate option to do that is by setting Display Actual Price to gestures on your products. Step-by-step guide In Columns Map, set the price column to map on msrp attribute. Under Replace empty values from Product Filters, add a rule to replace column price with the directive called Price - gives you the normal price. This has the following consequences: For simple products, it will use MSRP if it exists, if not, it will use the normal price. For configurable, it will use the configurable MSRP. If empty, it will use the configurable normal price. For children of configurable, it uses MSRP if it exists. If empty, it will get the price from the configurable + options. If you're using SCP (simple configurable products), it will in fact use simple pricing. The sale_price will not take MSRP into consideration as promos won't be ever applied to msrp. You could output MSRP in lieu of sale_price if you'd like, just do the same 2 steps outlined above. You shouldn't overwrite msrp or price attributes in the Configurable attribute overwrite section. This may lead to unwanted behavior. Set MSRP on configurable products and all their children.       Set up stores and feeds for multiple countries Magento supports the very useful feature of creating multiple stores that target different countries. You can setup storeviews that have a different language or currency, while re-using the same product catalog, categories and promotions, even the same customer base. There are many ways to achieve this setup: some are easier to configure, but more restrictive, while others are a bit more involved, but offer more flexibility. However, to make sure you adhere to the Google Shopping policies, there's one particular way to setup Magento that has proven to be the most efficient. Conditions for product pages A shopping feed must be submitted to a specific Country. Every feed will naturally contain links to the products on your website, links that will apply to the feed's Country. Google requires all Product pages to adhere to some standard rules. The most important are: The Page must show the exact product as in the feed, with the same name, image and description this information must be visible at all times, and must not require a login The price and currency must match exactly the values submitted in the feed Specifically, JavaScript or cookies cannot be used to change the currency on page load The page language must match the country of the feed Magento setup Let's take an example: we have a clothing store that sells the same products in the U.S. and Canada, and wants to also launch in the UK and France. The best way to set this up is to have 2 Magento websites, and 5 store views. one Magento website for the US and Canada, since they are already an established business there US has one store view Canada has two store views - one for English, and one for French and another website for the UK and France, to allow for different products and special promotions targeting this new Market the UK has one store view and France has another (if you don't need special treatment for the EU stores, a good alternative is to have just one website for all storeviews) Each country must have their own store view, so you can safely and easily do these settings required by Google Shopping: Languages - France will require product pages in French; for Canada, you can choose between French and English, or better yet have both, one in each store view Currency - every country needs a different currency   a. Go to the Store View level to set this up for each of the store views  b. For example, For US, set USD as the Default Display currency, and the only Allowed currency. (see Fig 9.4) Fig 9.4 Set currency [missing screenshot: Screen Shot 2015-03-06 at 17.36.31.png] Tax Settings US and Canada pages must not include taxes in the price UK and French however, do need to display prices including tax (you can choose to display both) remember to do this for the feed settings as well, for the price and sale_price columns Frequently asked questions Can I submit the same feed to more than one country? We do not recommend it, and that's because of the differences in pricing (tax/no tax), currency and language. Any mismatch in any one of the 3 will not work. Even if you do convert prices manually, after the feed is generated, you still need to have Product pages that use that currency / language Switching the currency with JavaScript / ajax / cookies (default currency switcher) will probably not work. Can I have multi-currency on one store view? No - Magento uses cookies to switch currencies. While this is acceptable for users, the marketplace crawler may not understand it.     Detaching feed generation from magento cron Reasons to detach: No heartbeat detected message on feeds grid. This is a sign that magento cron fails to schedule the cronjob, as result feed is not generated.  Large catalogs with other backend cron tasks. It may take hours for the cron to generate and this would freeze all other backend tasks for that time.  Steps to detach: Go to System > Configuration > Rocket Shopping Feeds > General  > Enable Magento cron and set it to Off.  < v2.1.2 If you are running an older version than v2.1.2, the admin config is missing, so this needs to be done manually by editing module's configuration file and remove or comment out the following lines:app/code/community/RocketWeb/ShoppingFeeds/etc/config.xml * * * * * rocketshoppingfeeds/observer::processSchedule * * * * * rocketshoppingfeeds/observer::processQueue Than, clear cache.  Set a dedicated crontab, just for feed generation using the included shell script: */3 * * * * php //shell/gsf_generate.php Make sure to replace the with the actual path on the server.  Debugging If you need to check on the output of feed processing, you could run the script over ssh like this: php //shell/gsf_generate.php --verbose Before you launch this script make sure you set a feed pending for processing. Use the Run Now button in the admin.  Set up Bing Catalog Set up Bing Catalog Prepare your store in Bing Merchant Center Configure the feed Submit the feed to Bing Microsoft will review your store, process takes around 24 hrs, and You will receive an email with the results. Prepare your store in Bing Merchant Center If you don't already have an Bing Ads account, set up one: https://bingads.microsoft.com/customer/Signup.aspx Setup a store by logging into your Bing Ads account and going to Tools > Bing Merchant Center > Create store. After you are done creating your store we suggest you configure the store's FTP settings: Bing Merchant Center > Select store > FTP Settings tab - create an FTP account within the Merchant Center and take of the server address, user name and password as we will need it later. (see Fig 3.1) Fig 3.1 SFTP and FTP settings Configure the feed Follow the steps on adding a feed section and use Bing Catalog under Feed Type. Set the target Store View.  If you have different store views for each target country, you may want to create a feed for each of those stores.  When you change the store view, Feed Currency should be set on the default displayed currency for that store. (see Fig 3.2) Fig 3.2 Store view     Review Columns Map tab. Basic columns are preconfigured to match most catalogs. If the default value does not match your catalog, then you should change it to one that suits your catalog setup. It is recommended you study the Bing Catalog Fields if you want to customize your columns map. If your store sells Apparels, you'll have to add in the apparel required columns: color, size, gender and age_group. Since apparels are mostly configurable products, use the Variant Attribute directive to map size and color columns onto configurable attributes. If your apparels are simple products with custom options instead of configurable products, you should use Custom Options in the mappings instead of Variant Attribute. Custom Options directive allow you to choose which options hold that particular column information. (see Fig 3.3) Fig 3.3 Columns Map     For the US, exclude tax in the price. For Canada and India, exclude any value added tax (VAT) in the price. For all other countries, be sure to include VAT in the price. You can turn taxes off under the price and sale_price columns (see Fig 3.4) More options on how to set your feed columns, can be seen at Columns Map page. Save feed configuration ! Fig 3.4 Product prices Categorize products under Categories Map tab. First choose the right Feed Localization, which corresponds to target country and language of your store. Use the autocomplete boxes for each of your categories to find a matching Bing taxonomy. You should always pick something from the autocomplete list, otherwise Bing will not validate them.   Here you have a chance to exclude products from certain categories, by unchecking the related green box from the right side. (see Fig 3.5) If you have products that are not assigned to a category, you could use the Include products w/o category to exclude them. Save feed configuration ! Fig 3.5 Categories Map Set the FTP Uploads  Use the Add Account button and fill in the FTP account details created in preparation of your Merchant Center. (see Fig 3.6) See more information on FTP Uploads. Validate and Save feed configuration !Fig 3.6. FTPUploads Submit the feed to Bing Register the feed with Merchant Center   Navigate to Catalog Management in the selected store in the Merchant Center and click on the Create Catalog button, then follow the steps to register it: Location - should correspond to the Feed Localization and Feed Currency set earlier at step 2. from feed configuration in Magento. Catalog name - can be anything, but for consistency, name it the same way as you did in Magento. (see Fig 3.7)   You can opt for Bing to automatically retrieve the feed from a specified URL (Source URL), upload file using FTP or manually upload it. File name = feed_.txt (for FTP upload) (see Fig 3.7) Replace the with the feed ID in Magento, as it can be seen in the feed management screen. Fig 3.7 Create a new catalog Generate the feed Click the Run Now button in the feed feed management screen, and wait for the feed to complete. This will generate the feed file and also upload it to your Merchant Center. (see Fig 3.8) Feed will process daily, so at this step you may also adjust the Run Schedule if you need to. Check our guide on Generating the feed for more details. Fig 3.8 Generate Feed   Analyze results Once the feed has completed, go into the Merchant Center and select the feed you just registered.   Check the number of item processed and see if there are any errors with processing. If there are errors, follow our Testing and Troubleshooting section to help solve them. More on Google Shopping Bing Catalog Tax Bing Catalog Tax Tax requirements depend on the feed's target country, please read the Bing Merchant Center catalog tax policy docs to understand what the requirements are for your feed. Tax setup Tax setup For the U.S., do not include tax in the price. For the U.K., the prices submitted in the catalog feed must not include any value added tax (VAT). Item prices (the price field) for all other countries provided in the catalog feed must include applicable taxes. For most of the countries, value added tax needs to be included in the price. This is needed on product pages as well as in the price field in the feed. Exception to this rule applies to US, Canada and India stores.      Including tax in the price (non-US feeds) First make sure your products pages display the price including tax. You should check the setting under Admin > System > Configuration > Sales > Tax > Price Display Settings, should be set to Including Tax. The feed has to be configured to follow it by setting the price and sale_price columns in the Columns Map to the appropriate Price and Sale Price directives, having the option Add Tax = Yes. (see Fig 3.9) Fig 3.9 Include tax in the price [missing screenshot: price_tax.png] Set up ShareASale Configure and generate the feed. Submit the feed to ShareAsale You are required to have an active Shareasale.com merchnat account. Create an account and follow the merchant setup wizard, than come back to this page. Configure and generate the feed. Follow the steps on adding a feed section and use Google Shopping Feed under Feed Type. Set the target Store View.  If you have more than one store view, you may want to create a feed for each of them.  When you change the store view, Feed Currency should be set on the default displayed currency for that store. (see Fig 4.1) Save feed configuration ! Fig. 4.1 Store View selection Categorize products under Categories Map tab. ShareAsale uses a list of product categories used to better target affiliate adds. Go through all categories and fill in the corresponding ShareASale taxonomy. Use the autocomplete, type something like "Bed" to pull the list of available values, and select appropriate ones. (See Fig 4.2) The full list of categories you can choose from can be found at https://account.shareasale.com/m-productmassupload.cfm In this screen you can also disable any of the categories holding products you don't want in the feed. Save feed configuration ! Fig. 4.2 Product Categories Adjust Columns Map tab. Most of the feed columns should already be mapped to the correct output, but there are a few which need adjusting to your business: Required: Find the column named "merchantid", it should be mapped by default to a StaticValue, so go ahead and fill in the value. (See FIg. 4.3) You can find your Merchant ID by logging in into the merchant account and look it up next to the shareasale logo. (See Fig. 4.4) Save feed configuration ! Optionals: Few optional fields need to be mapped to custom magento attributes. Create attributes in your magento catalog for each of the entries below, than edit the Columns Map, find the column with the same name, and change the mapping to the correspondent attribute. Fig. 4.3 Fill in merchantid in the feed's Columns Map Fig. 4.4 Merchant Id under ShareASale commission Float dollar amount of ShareASale commission as a quick reference for the affiliate. Ex: 14.50 partnumber Text manufacturer provided value that uniquely identifies this product. Ex: 6E086 isbn Text ISBN for this product, if applicable. Ex: 978-3-16-148410-0 upc Text UPC for this product, if applicable. Ex: 036000291450 compatiblewith Text Comma separated list of manufacturer partnumbers. Ex: 4E046, 5E033. compareto Text Comma separated list of manufacturer partnumbers. Ex: 4E046, 5E033. custom1 .. custom5 Text Any existing product attribute you would like to share with your affiliates.   For products holding magento custom options, you could set up a maximum of 5, for which you'll have to edit the correspondent columns under Columns Map and select which of the options to output:  option1 ... option5 Text Any existing product custom option you would like to share with your affiliates.   There's also a possibility to specify custom commission for your products, but once again you'll have to create product custom attributes for those and map those attributes under the next columns: customcommissions Text Custom commission rate for this product. Can be a comma delimited list which indicates commission rate at each tier, starting with the base rate. For example, to specify a 10% base rate with a 12% rate at the first tier, use "10,12". customcommissionisflatrate Bit Populate with a 1 to indicate that the custom commission is a flat rate instead of a percentage. Populate with 0 or leave blank for a percentage value. customcommissionnewcustomermultiplier Float Multiplier for custom commission if the purchase is from a new customer.    Those 3 commission fields require product level reporting in your ShareASale tracking code. You should contact ShareASale support to enable them.  Submit the feed to ShareAsale Generate the feed Click the Run Now button in the feed feed management screen, and wait for the feed to complete. This will generate the feed file and also upload it to your Merchant Center. (see Fig 4.2) Once the feed file has completed, download the file from feeds management screen, than compress the file to zip or gz as a preparation for feed activation. Upload the feed file to Merchnat Center Login to ShareAsale merchant account, navigate to My Creatives > Datafeed > Product Management Center > UPLOAD A NEW DATAFEED. (see Fig 4.3). Use the upload form to send the first feed file to ShareASale. Fig. 4.2 Generate File Fig. 4.3 Upload File   3. Set FTP uploads Once the first feed file is uploaded to merchnat center, you may request FTP account details for uploading the file automatically each day.  Use the Submit Ticket button at the bottom of your merchnat center, or email share a sale support. (See Fig. 4.4).  We have uploaded our fist datafeed, and we would like to  receive instructions on uploading the file via FTP. Our  server IP address uploading the file is xxx.xxx.xxx.xxx. Ask your store hosting provider what the server IP is, and use it instead of xxx.xxx.xxx.xxx when sending the request. Once you get the FTP account details, go ahead and fill them in in your feed configuration under FTP Uploads tab (See Fig. 4.5).  Save feed configuration ! Feed will generate and upload a file update each day, so at this step you may also adjust the Run Schedule if you need to. Check our guide on Generating the feed for more details.   Fig. 4.4 Requesting FTP details Fig. 4.5 FTP automatic upload account Developing custom feeds This feature is available from version 2.1.1 - contact us for upgrades The Shopping Feeds extension has a great degree of flexibility, but if your store has needs beyond what our extension provides via our feed templates, then you have the possibility of creating your own feed type with custom coded features that fit your store. Check our newest templates We add new templates often, so check our page to see an up-to-date list! Maybe we've already added what you need. https://xtensiongalaxy.com/rocket-shopping-feeds.html  When to consider a custom feed you need to integrate with an unsupported 3rd party your store has custom product types your store has customizations to core features (prices, taxes, product types etc) your feed needs columns with additional logic, that our directives do not cover Start here The Generic feed type can fit many different workflows and you can use it to integrate with various providers.  It offers the same flexibility as all our feeds but without any specifics that the providers impose. It is a good start for a custom feed Custom code - starter module Download for v2.1.1+ If you need to edit code, here's a starter module for a new custom feed type which already integrates with our extension. Introduction A custom feed type will appear among other feeds in your Shopping Feeds admin grid. You can add as many feeds of this type as you want. It will start off as a Generic feed, so if you can make this feed type work for you, then we recommend it, since it's a lot easier. However, if you hit limits and you need to touch code, read on! Development Your custom feed type will require coding skills to set up and develop; it can add and change a lot of the core functionality, but please keep in mind that it's not something to complete in a day. Compared to patching our code, this approach is compatible with future upgrades. No need to worry that your changes will be overwritten. Upgrades won't always be 100% stress-free, but we strive to provide you with a full list of changes and bug-fixes Supported extension versions To create custom feed types extension version 2.2.x. Please contact us to upgrade If you cannot upgrade, reach out and we can provide guidance. Starter module Download starter module for v2.1.1+ or https://github.com/rocketweb/Company_Feeds You can install the module with Modman, or you can manually download and install it in your Magento. To register your new feed type, you'll need to rewrite one of our modules. We've already done this for you and packaged it into a starter module. Here's what you need to get your feed to register correctly: Install the module from our repo register your feed name: edit names and labels in Company/Feeds/Model/Feed/Type.php rename the module and files with your Company and module names, just as you would do for a regular new magento module create the feed xml file in our module. This has to be under our module's directory for now, but upgrades won't overwrite your file this has to be under app/code/community/RocketWeb/ShoppingFeeds/etc/feeds/myfeed.xml to get started, just edit our sample, or copy from generic.xml You need to add two very important nodes: Company_Feeds # Your module name, as defined in app/etc/modules/Your_Module.xml companyfeeds # models handle from your config.xml; we'll use this with Mage::getModel() Back in your module, in Model/Feed/Type.php, you can change the Taxonomy URL if you need it; see below After a cache clear, you should be able to add a new feed based on your Custom Feed Type Your module may have more than one feed type. Be sure to duplicate the example code to register it properly, create another xml file and you're set. Features Here's what you can expect to accomplish easily with the starter module in place: Custom taxonomies If your feed requires custom taxonomy mappings for Categories, then you can easily replace the Google / Bing etc. URLs with your own list by making a custom feed type. The taxonomy file format is txt, one line per category; lines starting with # are comments and will be discarded For the taxonomy URL, you can use a web URL, or a file link such as: "file:///full/path/to/file.txt" (the protocol is always needed) The taxonomy file will be cached in var/cache Modify existing directives Most feed work is done in directives - these are functions that you can tie to a column in your feed, and are part of different classes based on product type. So for example the mapDirectivePrice() function is on a different class for Configurables than associated products. You can overwrite these functions in your module; we've done an example for the Configurable Associated class: the ID directive will be composed of the parent sku and the child sku. Look in  Company_Feeds_Model_Map_Myfeed_Product_Configurable_Associated::mapDirectiveId() You can overwrite any directive by creating the corresponding class. Your feed falls back on the Generic feed type, so look there for guidance on how to name your classes. There's no need to use to overwrite our code, like you would in Magento. As long as the class names mirror the ones in our Generic module, we can automatically find and use them. New Directives You can also add new directives to existing product types: just add a method named mapDirectiveName to the class. This function, like all directives, should receive one parameter: an array of column options. See our example function: Company_Feeds_Model_Map_Myfeed_Product_Abstract::mapDirectiveMyDirective() Register your new directive For this to work, you need to register your new directive to a feed type, in the feed xml. Look at our example in "app/code/community/RocketWeb/ShoppingFeeds/etc/feeds/myfeed.xml" You'll then be able to map your directive to any feed column of this type.