You have no items in your shopping cart.

Installation and configuring plug-in Feed Manager

1. Complete description
2. How to create a new feed from the list of preconfigured templates
3. Working with filters. How to select only one product category?
4. How to export products with qty > 0.
5. How to export product specifications.
6. How to change product title.
7. How to add new custom feed template (CSV, XML, XLSX, JSON).
8. How to add a static variable to the link field (affiliate variable for Google, etc.)
9. How to use formula for calculation values.
10. How to add tag ProductData to Amazon Product template (XML).
11. How to upgrade the plugin?
12. How to use external plugins.
13. How to create a ChatGPT Shopping feed (OpenAI).


1. Complete description
Key features
You can create multiple feed files for a single feed network.
For example:
You can create one feed file for the Tablets category and another one for the Shoes category, and a third one for the Phones category.
You can create one feed file for USD currency and another one for EUR currency.
If you have a multi-store, each store will have its own feed file.
If your store supports multiple languages, you can create a separate feed file for each language.

Key terms (Glossary):
Feed network - a website / trading site / etc. for which the file is created.
Feed file - a file created by the plugin to export products into the feed network.
Feed template - the list of fields of the feed network that describes the export rules.
Feed - a task of the plugin that lets you create a feed file for a feed network.

The feed edit page has seven tabs: Info, Feed Settings, Product Filter, Advanced Filter, Schedule Settings, Upload Settings and Tools.
The buttons at the top of the page are available on every tab:
Generate - create the feed file now.
Save / Save and Continue Edit - save the feed.
Copy feed template - create a full copy of this feed with all its filters, mappings and settings.
Delete - delete the feed.


First tab - Info

Id - the internal number of the feed.
Type - the feed network the file is created for. For example: Google XML, ChatGPT Shopping, AmazonAds, etc. The type is selected when the feed is created and cannot be changed later. If the feed network you need is not in the list, we can add it for free.
Name - used by the store administrator to identify the feed. For example: Google for the Tablets category.
Admin Comment - a comment for the store administrator only.
Export file name - the name of the generated file. The full file name is composed as follows:
(Export file name)_(language)_(storeId).(file extension)

For example:
google_ru-ru_1.xml
google - export file name, ru-ru - language, 1 - store Id, xml - file type.

You can also use tokens for the current date and time in the file name: %yyyy% - year, %mm% - month, %dd% - day, %hh% - hour, %mi% - minute.

All feed files are saved in the folder:
wwwroot\files\exportimport - new nop versions
or
Content\files\ExportImport - old nop versions

Use static file name - the language and the store Id are not added to the file name. Use it when the feed network always reads the same URL.
Compress File - after the feed file is generated it will also be archived to ZIP. For the ChatGPT Shopping template it is compressed to gzip (.csv.gz) instead, because OpenAI does not accept ZIP.
Store - the store for which the feed file will be created.
Language - the language of the feed file. All localized values (product name, description, category names) are exported in this language.
Warehouse - the warehouse whose stock quantity will be exported. Select 'All warehouses' if you do not use multiple warehouses.
Price Markup - use it if you want to increase or decrease all prices. For example: if you want to increase all prices by 12%, enter '12' in this field. The price of a phone in the store is USD 88, and its price in the feed file will be USD 88 + 12% = USD 98.56.
Product image size - the size of the exported pictures. Note: all images are exported without a watermark. This is one of the requirements of the feed networks (Google, Amazon, Ebay, etc.). If you want to use a watermark in your store, use our plugin NopWatermark. You will not have a conflict with the images.
Default category (Google, Amazon, etc.) - for the feed networks that require a taxonomy category, you can select the category which will be used by default for the whole feed file. Note: you can also set a taxonomy category for a single product or for a category on the Product Filter tab.
Feed file - a direct link to the generated feed file. If you use compression, you will also see a link to the ZIP file.
Report file - a link to the report file. Use it to analyse the errors that happened during the generation.


Second tab - Feed Settings

The first lines are the links to the specification of the feed network. Read them before you change the field mapping.
Encoding - the encoding of the feed file. Do not change it. It is already preconfigured.
Category path delimiter - used in the category breadcrumb. Do not change it. It is already preconfigured.
Decimal Delimiter - the decimal delimiter for numeric data (price). Some feed networks (France, Germany) use ',' (comma). Do not change it. It is already preconfigured.
Price format - do not change it. It is already preconfigured.
Datetime format - do not change it. It is already preconfigured.

The grid below contains all the fields of the feed template:
Id - the number of the field.
Caption - the name of the field in the admin area.
Feed Name - the name of the field in the generated file. This is the name the feed network expects.
Field name code - the value of your store that will be exported into this field. For example: Name, Full Description, Price, Url.
Info - a short summary of the other settings of the field (chars limit, post-process action, CDATA, advanced).

Important. The field template of a feed is stored in the database, separately for each feed. The XML files in the plugin folder 'FeedSchema' are only preconfigured defaults: they are loaded the first time the feed is opened and can be restored at any time with the Load preconfigured template button. Upgrading the plugin does not change the template stored for your feed, and two feeds of the same type are fully independent.
Add new - add a new field to the template.
Download Schema - download the template of this feed as an XML file.
Upload Schema - upload a modified XML file back. The file is validated before it is saved.
Load preconfigured template - reset the template of this feed to the file shipped with the plugin. All your changes to this feed template will be lost.

Changing a field of the feed template. Press the Edit button in the row of the field.

Caption - the name of the field in the admin area.
Feed Name - the name of the field in the generated file.
Field name code - the value of your store that will be exported into this field.
RowSourceType - the source of the rows for the fields that can be repeated.
Prefix - this text will be added before each value. For example: if you set the prefix 'USD' for Price, all prices after the export will look like 'USD 15.25'.
Suffix - this text will be added after each value. For example: if you set the suffix 'USD' for Price, all prices after the export will look like '15.25 USD'.
Default value - if the product has no value for this field, this value will be exported instead. For example: you can set the shipping cost for all products, or set the manufacturer for the products that have no manufacturer assigned, or set the condition 'New' for all products.
XPath - the place of the field in the XML tree. See section 10.
XAttribute Name and XAttribute Value - add an XML attribute to the tag.
Chars limit - the maximum length of the value. The feed networks reject the values that are too long.
Required - the product is not exported when this field is empty.
Ignore Null Or Empty - the tag is not written into the file when the value is empty.
Use CDATA - wrap the value in a CDATA section (XML only).
Post-process action - an additional operation on the value. For example: decode the HTML entities of the description.
Control - the type of the control that is shown for this field on the Product Filter tab.
Advanced - the field is hidden in the form for a product or a category. This attribute is for the convenience of the store administrator. For example: if you sell clothes, remove the Advanced attribute from color, size and the other fields you use. It will be more convenient to change them.


Third tab - Product Filter

On the Product Filter tab you can specify which products and categories will be exported into the feed file, and you can also change their values. The values can be set for a single product and for a whole category.

Export Grouped products - export the grouped products themselves.
Export product combinations - export every product attribute combination as a separate row of the feed file.
Skip main product - export only the combinations, without the main product. It works together with 'Export product combinations'.
Use the category tree on the left to open a category. The grid Manage Categories shows the subcategories and the grid Products shows the products of the selected category.
Exported - shows whether the category or the product will be exported.
Default values - shows the values you set for this category or product.
Edit - change the export state and the values.
Delete - delete the values. The export state returns to Inherited.

When you press Edit, the following window appears:

Exported - export this category (this product). It can take three values:

No - do not export
Yes - export
Inherited - inherit the value from the parent element. If 'No' is set for the parent element, the product (all products of the category) will not be exported.

With this parameter you can specify which products to export and which not. For example: disable the export of the products of the Books category.
CategoryMap - for the networks that require a taxonomy category, you can select the taxonomy category which will be used for this product or for all products of this category. Note: you can set this value for the whole feed on the first tab Info.
Show advanced fields - for the convenience of the store owner only the main fields of the feed template are shown by default. Check this box to see all the fields. Note: you can mark a field as advanced on the tab Feed Settings.
The fields below (Product Name, Description, Product url, Price, etc.) let you change the exported value for this product or for the whole category. For example: set the price to USD 50, or change the SKU of the product to 45789. Note: this is not a default value, this is the value itself. For example: the SKU of the product in the store is 14578, and in the feed file the product will have the SKU 45789. Here you can also set the color, the size, the shipping cost, etc.


Fourth tab - Advanced Filter
The rules that select the products for the export.
You can use a single requirement, or group several requirements and apply them together. A requirement group has its own interaction type, And or Or, and you can put one group inside another one.

Product rule requirement type:
Add Group - add a nested group of requirements.
Product - a rule for a property of the product: category, manufacturer, vendor, price, quantity, pre-order, free shipping, warehouse, GTIN, weight, height, length, width, tier price quantity, buy button, product cost, product name, SKU.
Specification Attributes - a rule for a product specification attribute. For example: CPU Type is equal to AMD.
Product Attribute Combination - a rule for a product attribute combination: price, quantity, GTIN, weight.

After you select the type, choose the Property, the Operator (==, !=, >, <, etc.) and the Value, then press Save. See sections 3 and 4 for examples.


Fifth tab - Schedule Settings

Enable Scheduler - enable or disable the schedule of this feed.
Select the days of the week and the hours when the feed file has to be generated.
Attention. The times are expressed in UTC (Coordinated Universal Time), not in the time of your store.
If you want the feed file to be generated automatically, enable the scheduler and select at least one day and one hour. If the scheduler is disabled, you can generate the feed file manually with the Generate button.


Sixth tab - Upload Settings

Enabled - send the feed file to the server after every generation.
Protocol - FTP, FTPS or SFTP.
Host Name, Port, User Name, Password, Passive Mode - the parameters of your server.
Manually upload files - send the feed file to the server now.
Note: if the option Compress File is enabled on the tab Info, only the compressed file (ZIP, or .csv.gz for ChatGPT Shopping) will be sent to the server.
For the Amazon feed types this tab also contains the Amazon settings (seller id, marketplace id, access key id, secret key, MWS auth token). The generated file is submitted to Amazon after every generation.


Seventh tab - Tools

Download report - get the list of the products which were not included in the feed file. The report has two columns: Product ID and Product Name. Use this report when you expect a product in the feed file and it is not there.


The settings of the plugin (Menu - Plugins - FoxNetSoft - Configure)

Use external picture service - use the picture service of the plugin. It converts the WebP and PNG pictures to JPEG, because many feed networks reject WebP.
Enable CDN for pictures - build the picture URLs from your CDN address.
Use Load Balancer (remove https) - use it if your site works behind a load balancer.
Use Task Locker - protect a feed from being generated twice at the same time. Use it if your site works on several servers.
Task run timeout - the maximum duration of one feed export (1800 seconds / 30 minutes when the field is empty). nopCommerce has its own timeout for the whole scheduled task: Configuration > App settings > Common > 'Schedule task run timeout' (in milliseconds; when it is empty nopCommerce cancels the task after 100 seconds). Keep the nopCommerce value larger than this one, because a single scheduled run can export several feeds one after another.
Run without nopcommerce task manager - the export is started over HTTP and is not bound to the scheduler request. Use it for large catalogs, when the nopCommerce scheduler cancels the export before it is finished.
Add Feed Manager panel on the Product/Category pages - show a panel on the product edit page and on the category edit page with the list of the feeds this product or category belongs to.


2. How to create a new feed from the list of preconfigured templates
Open the list of feeds (Menu - Plugins - FoxNetSoft - Feeds) and press Add new.

In the new window select the feed type from the list of the preconfigured templates. The plugin has 84 templates for Google, ChatGPT Shopping, Facebook, TikTok, Amazon, Pinterest, Idealo, PriceRunner and many other networks. The ChatGPT Shopping feed is described in section 13.
Then open the tab Info, enter the Name of the feed and the Export file name. Note: the export file names must not repeat!

The list of feeds shows:
Scheduler - whether the schedule of the feed is enabled.
Files - the link to the generated file and the date and time of the last generation.
Generate - create the feed file now. The file is not sent to the FTP server: it is sent after every scheduled generation, or press Manually upload files on the tab Upload Settings.
Edit - open the feed.
Use the filter Type at the top of the page if you have many feeds.


3. Working with filters. How to select only one product category?

Option 1.
Open the tab Advanced Filter and create a requirement. Select the type Product, the property Category, the operator == and the value Computers. Only the products of the Computers category will be exported.

If you want to exclude one category instead, use the operator != with the same property.

Option 2.
Open the tab Product Filter. For every category that must not be exported, change the value Exported to 'No'. If a single product of that category still has to be exported, change the value Exported of this product to 'Yes'. All categories and products have the value Inherited by default, so they are exported.
The example shows that the products of the Electronics category will not be exported.

Note.
The value 'No' of a parent category hides ALL its subcategories. If you want to export only the subcategory Notebooks of the category Computers, you should set the value Yes for the category Computers and the value No for the other subcategories.


4. How to export products with qty > 0.

Open the tab Advanced Filter and add a new requirement. Select the type Product, the property Quantity, the operator > and the value 0. Press Save.

If you add several requirements to the same group and the interaction type of the group is And, all of them must be true. For example: the price is greater than 0 AND the quantity is greater than 0.


5. How to export product specifications.

You want to export the product specification with the name Color into the field 'color' of the feed file.
Open the tab Feed Settings, find the field Color and press the Edit button. Select the value Spec.: Color in the list Field name code and press Save.

The list Field name code contains every specification attribute of your store with the prefix 'Spec.:'. After you save the field, the grid shows the new mapping.


6. How to change product title.

You can export another product name instead of the name of your store. Open the tab Product Filter, find the product in the category tree and press the Edit button in its row. Enter the new name in the field Product Name and press Save.

The new value is shown in the column Default values of the grid. This value is used only in this feed file. The name of the product in your store is not changed.

You can set the value for a whole category in the same way. Then the value is used for all products of this category.


7. How to add new custom feed template (CSV, XML, XLSX, JSON).

The plugin allows you to add your own feed type. It is very easy.

Attention. Save your feed types in the file feeds.custom.xml, not in the file feeds.xml.
The list of the feed types shipped with the plugin is stored in the file feeds.xml in the root plugin folder. This file is a part of the plugin package, so it is replaced every time you upgrade the plugin and all your changes in it are lost. The plugin package never contains the file feeds.custom.xml, so an upgrade never overwrites it.

Create the file
App_Data\FoxNetSoft.FeedManager\feeds.custom.xml
in the root folder of your site (NOT in the plugin folder) and restart the application. The plugin reads both files and merges your feed types into the list shipped in feeds.xml. You can find the example file feeds.custom.sample.xml in the root plugin folder.

Rules:
- The file has the same structure as feeds.xml.
- Use Id 90000 or higher for your own feed types. If you use the Id of a feed type shipped with the plugin, your entry replaces the shipped one. This is the way to change a preconfigured feed type without editing feeds.xml.
- Schema and Taxonomy contain a file name only, without a path. The plugin looks for the file in the plugin folder FeedSchema first, and then in App_Data\FoxNetSoft.FeedManager\FeedSchema. Put your own schema and taxonomy files in the App_Data folder, because the plugin folder is replaced during an upgrade.
- Image is a file name from the plugin folder Images, or a URL (https://..., /images/...). Leave it empty if you do not need a picture.

An example of the file feeds.custom.xml:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfFeedNetWork xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FeedNetWork>
    <Id>90001</Id>
    <Name>My marketplace (CSV)</Name>
    <Image></Image>
    <Schema>mymarketplace.xml</Schema>
    <ExportMethodId>99999</ExportMethodId>
    <DisplayOrder>1000</DisplayOrder>
    <ExportFileType>CSV</ExportFileType>
    <Separator>;</Separator>
    <FieldEnclosure>"</FieldEnclosure>
    <Documentations>
      <DocLinkValue>
        <Message>Feed specification</Message>
        <HtmlUrl>https://www.example.com/feed-specification</HtmlUrl>
      </DocLinkValue>
    </Documentations>
    <StockStatusInStock>In Stock</StockStatusInStock>
    <StockStatusOutofStock>Out of Stock</StockStatusOutofStock>
    <StockStatusPresale>Presale</StockStatusPresale>
  </FeedNetWork>
</ArrayOfFeedNetWork>

Description of the parameters:
Id - each feed type must have a unique number. Use 90000 or higher for your own feed types. Example: 90001
Name - the name of the feed type. Example: MyCustomFeed
Image - the picture of the feed type. Example: MyCustomFeed.png. We recommend to use a png file. You can also use a URL.
Schema - the name of the schema file. The plugin exports the products using this file, and you write the mapping rules in it. Example: mycustomfeed.xml
ExportMethodId - the export method the plugin will use. The plugin has many preconfigured methods. Example: 1 - Google, 99999 - CustomCSV, 99998 - CustomXML, 99997 - CustomJSON, 99996 - CustomXLSX, 1000 - XML with three levels (product / attribute combination / attribute values).

If you want to add your own new feed type, use the value 99999 (CustomCSV), 99998 (CustomXML), 99997 (CustomJSON) or 99996 (CustomXLSX).
If you want to add a new feed type based on an existing one, use the value of the parent feed type. Example: 1 for Google.

ExportFileType - XML, CSV, TXT, TSV, JSON or XLSX.
Separator - the separator for the CSV, TXT and TSV files. Example: tab, ',' (comma) or ';' (semicolon). You can skip this value if you do not need it.
FieldEnclosure - the character that encloses the values of the CSV, TXT and TSV files. Example: " (double quote).
XMLRootElement - for an XML template, the name of the top level of the tree. The default value is "products".
XMLItemElement - for an XML template, the name of the item of the tree. The default value is "product".
DisplayOrder - you can rearrange the feed types on the screen. The feed types you need will be at the beginning.
HasMerchantId - set true if your feed uses a MerchantId value. You can skip this value if you do not need it.
Taxonomy - if you want to use a taxonomy mapping, write the name of the file which contains the list of the taxonomy categories. This is a plain txt file. See the other taxonomy files as an example.
Documentations - this block contains the links to the description of the feed type.
StockStatusInStock - the value the plugin writes when the product is available in stock. Example: In Stock.
StockStatusOutofStock - the value the plugin writes when the product is out of stock. Example: Out of Stock.
StockStatusPresale - some feed types support a value for a pre-sale product. Example: Presale.

Example 1.
You want to create a new feed template for Google in Italy, because Google for Italy has other taxonomy categories, or because you want to have other preselected values in the schema file.

Open App_Data\FoxNetSoft.FeedManager\feeds.custom.xml and create a new block using the existing block for Google from feeds.xml as an example. The changed values are in bold.

  <FeedNetWork>
    <Id>90002</Id>
    <Name>GoogleItaly</Name>
    <Image>googleitaly.png</Image>
    <Schema>googleitaly.xml</Schema>
    <ExportMethodId>1</ExportMethodId>
    <DisplayOrder>1000</DisplayOrder>
    <ExportFileType>XML</ExportFileType>
    <Taxonomy>googleitalytaxonomy.txt</Taxonomy>
    <StockStatusInStock>In Stock</StockStatusInStock>
    <StockStatusOutofStock>Out of Stock</StockStatusOutofStock>
    <StockStatusPresale>Presale</StockStatusPresale>
  </FeedNetWork>

Create the new schema file googleitaly.xml using the existing file google.xml, download the taxonomy categories for Italy and create the file googleitalytaxonomy.txt. Save both files in the folder
App_Data\FoxNetSoft.FeedManager\FeedSchema
Copy the picture googleitaly.png into the plugin folder Images, or use a URL in the tag Image.
Restart the application, open the list of feeds in your store and create a new feed of the type GoogleItaly.

Example 2.
You want to create your own custom feed template.
Open App_Data\FoxNetSoft.FeedManager\feeds.custom.xml and create a new block. The important values are in bold.

  <FeedNetWork>
    <Id>90003</Id>
    <Name>MyCustomType</Name>
    <Image>MyCustomType.png</Image>
    <Schema>MyCustomType.xml</Schema>
    <ExportMethodId>99999</ExportMethodId>
    <DisplayOrder>1000</DisplayOrder>
    <ExportFileType>CSV</ExportFileType>
    <Separator>,</Separator>
    <FieldEnclosure>"</FieldEnclosure>
    <Documentations>
      <DocLinkValue>
        <Message>My Products Feed Specification</Message>
        <HtmlUrl>https://yoursite.com</HtmlUrl>
      </DocLinkValue>
    </Documentations>
    <StockStatusInStock>In Stock</StockStatusInStock>
    <StockStatusOutofStock>Out of Stock</StockStatusOutofStock>
    <StockStatusPresale>Presale</StockStatusPresale>
  </FeedNetWork>

Create the new schema file MyCustomType.xml using an existing file, for example nextag.xml, and save it in the folder App_Data\FoxNetSoft.FeedManager\FeedSchema. Change MyCustomType.xml using your own mapping. See the schema files of the other feed types as an example.
Copy the picture MyCustomType.png into the plugin folder Images.
Restart the application, open the list of feeds in your store and create a new feed of the type MyCustomType.

Note. If the file feeds.custom.xml contains an error, the plugin writes the message "Cannot read ..." in the log and uses only the feed types shipped with the plugin.


8. How to add a static variable to the link field (affiliate variable for Google, etc.).

Open the tab Feed Settings, find the field Product url and press the Edit button. Enter the suffix "?affiliate=google". You can add any string. Be careful with the "/" at the end of the URL. See the picture.

After you save the field, the suffix is shown in the column Info of the grid, and every product URL in the feed file ends with it.

You can use the Prefix and the Suffix of any other field in the same way.


9. How to use formula for calculation values.

The plugin supports the special token 'formula'. You can use it to calculate any value.
The token supports the subtokens 'price', 'productcost', 'weight' and 'additionalshippingcharge'.
The token supports only plain mathematical operators (+, -, *, /, ( ) ).
The result is rounded to two decimal places.
Write the formula in the field Field name code of the feed template. You can do it on the tab Feed Settings, or directly in the schema file.

Examples:

<FieldNameCode>formula:5+(price*0.4+1)</FieldNameCode>
<FieldNameCode>formula:10+weight*0.4+price</FieldNameCode>
<FieldNameCode>formula:5+(productcost*0.4+1)</FieldNameCode>
<FieldNameCode>formula:price+additionalshippingcharge</FieldNameCode>

Note. If the plugin cannot calculate the formula, it writes the error message in the report file of the feed. Open the report file (tab Info, Report file) and check the formula.


10. How to add tag ProductData to Amazon Product template (XML).

If you need to add the tag ProductData, you can do it with XPath. Write the path of the tag in the field XPath of the feed field. See the example.

  <FeedAttribute>
    <Id>105</Id>
    <FeedCaption>TSDLanguage</FeedCaption>
    <FeedName>TSDLanguage</FeedName>
    <DefaultValue>MyLanguage</DefaultValue>
    <FieldNameCode></FieldNameCode>
    <CharsLimit></CharsLimit>
    <Required>false</Required>
    <IgnoreNullOrEmpty>true</IgnoreNullOrEmpty>
    <XPath>ProductData/HealthProductType/HealthMisc</XPath>
    <UseCDATA>false</UseCDATA>
    <ActionId>0</ActionId>
  </FeedAttribute>

The plugin will create the following subtree:

<ProductData>
   <HealthProductType>
      <HealthMisc>
        <TSDLanguage>MyLanguage</TSDLanguage>
      </HealthMisc>
   </HealthProductType>
</ProductData>

The tags of the path are created only once, so several fields with the same XPath are written into the same subtree.


11. How to upgrade the plugin?

The old release is 3.00 or newer.
Just upload the new release. You can do it in three ways:
- from the nopCommerce admin area (Configuration - Local plugins - Upload plugin or theme),
- over FTP,
- or replace the plugin folder directly on the hosting.
You can replace all the files.

Nothing of yours is stored in the plugin folder:
- your own custom feed types are saved in the file App_Data\FoxNetSoft.FeedManager\feeds.custom.xml (see section 7),
- all your changed feed templates are saved in the tables of the plugin (in the database).
An upgrade cannot lose them, so it is easy to upgrade the plugin now.

The old release is older than 3.00.
In the old releases your changes were stored in the plugin folder, so you have to save them before the upgrade.

1. Backup the old plugin folder, especially the file feeds.xml and the subfolder FeedSchema.

2. Replace the plugin folder with the new files.

3. Pay attention! If you added your own custom feed types to the file feeds.xml, copy only these custom feed types into the new file App_Data\FoxNetSoft.FeedManager\feeds.custom.xml. See section 7. If you did not add them, ignore this step.

4. If you changed the preconfigured templates in the folder FeedSchema, copy your files back into the plugin folder. If you did not change them, ignore this step.

5. Restart nopCommerce.

6. Open the feed and press Generate to create the feed file. Check the result.

Starting from release 3.00 all your custom changes are saved in the tables of the database, so all the next upgrades are easy.

How to load a preconfigured template.
Open the feed, select the second tab Feed Settings, scroll to the bottom of the page and press the button Load preconfigured template. The template of this feed is reset to the file shipped with the plugin, so all your changes of this feed template will be lost.


12. How to use external plugins.

If you need to change your data before it is written into the feed file (for example, you want to remove the word 'New!' from the name of the product), you can use an external plugin. Feed Manager sends the product, the feed field and the type of the feed to this external plugin, the external plugin removes the word 'New!' and returns the new string back. You can also calculate your own price with your own logic in the same way.

1. Create a plain C# DLL library with a class named FeedManagerPlugin and a public method ReadAttributeValueAsync (nop 4.40 and newer) or ReadAttributeValue (nop 4.30 and older).

Example:

using Nop.Core.Domain.Catalog;

namespace TestPlugin
{
    public class FeedManagerPlugin
    {
       //nop 4.40 and newer
       public virtual Task<string> ReadAttributeValueAsync(Product product, ProductAttributeCombination productAttributeCombination, string feedColumName, string typeFeed, Store store, Language language)
       {
          if (product.Name.Contains("New!"))
             return Task.FromResult<string>(product.Name.Replace("New!", ""));
          else
             return Task.FromResult<string>(product.Name);
       }
    }
}

       //nop 4.30 and older
       public virtual string ReadAttributeValue(Product product, ProductAttributeCombination productAttributeCombination, string feedColumName, string typeFeed, Store store, Language language)
       {
          if (product.Name.Contains("New!"))
             return product.Name.Replace("New!", "");
          else
             return product.Name;
       }

Compile it and name the library replacenew.dll.
Note: the list of the parameters of the method was changed in version 2.10, so an old library has to be recompiled.

2. Create the new folder Plugins in the plugin folder FoxNetSoft.FeedManager.

3. Copy the file replacenew.dll into this new folder:
~/Plugins/FoxNetSoft.FeedManager/Plugins/
An example of the path:
/Plugins/FoxNetSoft.FeedManager/Plugins/yourpluginname.dll

4. Open the tab Feed Settings, press the Edit button of the field and enter plugin:replacenew in the field Field name code. You can also change the value FieldNameCode directly in the schema file.

  <FeedAttribute>
    <Id>1</Id>
    <FeedCaption>Product Name</FeedCaption>
    <FeedName>title</FeedName>
    <FieldNameCode>plugin:replacenew</FieldNameCode>
    <ConvertValues />
    <CharsLimit>150</CharsLimit>
    <Required>false</Required>
    <IgnoreNullOrEmpty>false</IgnoreNullOrEmpty>
    <ActionId>0</ActionId>
  </FeedAttribute>

The name after 'plugin:' is the name of the DLL file without the extension.

5. You can use the parameter productAttributeCombination if you want to create new virtual products from the product attribute combinations. Feed Manager sends the same product value and a different productAttributeCombination value for each combination. If the product does not have product attribute combinations, this parameter is NULL.

Note. If the plugin cannot find or load your library, it writes the error message in the report file of the feed.


13. How to create a ChatGPT Shopping feed (OpenAI).

The template ChatGPT Shopping creates the product feed that OpenAI uses to show your products in the ChatGPT search and shopping results. The file follows the OpenAI product feed specification: a CSV file, one row per product or variant, with the field names of the specification in the header row.
OpenAI does not read the feed from your store. You send it to the SFTP account that OpenAI gives you, as a full file, at least once a day.

1. Open the list of feeds, press Add new and select the template ChatGPT Shopping (see section 2).

2. On the tab Info select the store, the language and the currency.
Enable Compress File. For this template the plugin writes the file (Export file name).csv.gz (gzip) instead of a ZIP archive, because OpenAI does not accept ZIP.
Enable Use static file name. OpenAI expects the same file name on every upload.

3. If your products have attribute combinations, open the tab Product Filter and enable Export product combinations and Skip main product. Every combination becomes its own row with its own item_id, price, stock and picture. All the rows of a product have the same group_id, and variant_dict lists the options of the row, for example {"Color":"Black","Size":"10"}.

4. On the tab Upload Settings enable the upload, select the protocol SFTP and enter the host name, port, user name and password that OpenAI gave you.

5. On the tab Schedule Settings enable Enable Scheduler and select at least one time per day. The file is sent to OpenAI after every scheduled generation. The button Generate creates the file without sending it. Press Manually upload files on the tab Upload Settings to send it at once.

What the plugin does for this template:
- The prices are written as 79.99 USD in the currency of the feed, without tax, because the standard OpenAI upload is for the US. If the product has an Old price above the price, the old price is sent as price and the current price as sale_price.
- The GTIN is sent only when it has 8, 12, 13 or 14 digits and a valid check digit. The report file of the feed counts the rows where an invalid GTIN was left out.
- brand is required, so a product without a manufacturer is skipped. If all the products are your own brand, set a static value for brand (see section 8).
- seller_name and seller_url get the store name and the store URL when they are empty.
- review_count and star_rating come from the approved product reviews.
- The description is converted to plain text. Booleans are written as true / false.

What you fill in yourself on the tab Feed Settings (map the field to a specification attribute, or set a static value):
material, color, size, gender, age_group, shipping_price, accepts_returns, return_deadline_in_days, return_policy, seller_privacy_policy, seller_tos.
Keep is_eligible_checkout = false until OpenAI has enabled checkout for your store.

If your store sells where the prices include tax, change the source of price to Price with TAX and of sale_price to FullPrice with TAX with discount.
If the weight and the dimensions of your products include the packaging, remove dimensions, weight and item_weight_unit from the template. OpenAI asks for the values of the product itself.

The OpenAI product feed specification: developers.openai.com/commerce/specs/file-upload/products

 

Powered by nopCommerce

Copyright © 2026 FoxNetSoft. All rights reserved.