{"id":367610,"date":"2026-09-19T11:59:48","date_gmt":"2026-09-19T11:59:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/product-feed-for-finn-no\/"},"modified":"2026-09-19T11:59:29","modified_gmt":"2026-09-19T11:59:29","slug":"grainsoft-product-feed-for-finn-no","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/grainsoft-product-feed-for-finn-no\/","author":18045481,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Grainsoft Product Feed for FINN.no","header_author":"Damian Ziarnik","header_description":"Publishes your WooCommerce products to FINN.no by hosting a Store Hub Connect product feed.","assets_banners_color":"82c3f9","last_updated":"2026-09-19 11:59:29","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/suppi.pl\/damian-ziarnik","header_plugin_uri":"","header_author_uri":"https:\/\/grainsoft.pl\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rimosfafora","date":"2026-09-19 11:59:29","revision":3703263}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3703263,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3703263,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3703263,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3703263,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3703263,"resolution":"1","location":"assets","locale":"","width":945,"height":624},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3703263,"resolution":"2","location":"assets","locale":"","width":931,"height":526},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3703263,"resolution":"3","location":"assets","locale":"","width":832,"height":731},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3703263,"resolution":"4","location":"assets","locale":"","width":855,"height":557},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3703263,"resolution":"5","location":"assets","locale":"","width":718,"height":199}},"screenshots":{"1":"Your feed address, the health of the last build, one-click rebuild, and the products FINN will not receive with the reason for each.","2":"Choosing what goes in the feed: variations, stock, a listing limit, the order, and excluded categories.","3":"How products are described: description source, title suffix, category, brand, condition and extra attributes.","4":"Optional contact details and location, plus rebuild and uninstall housekeeping.","5":"The hosted feed in Google Shopping \/ RSS format, as FINN reads it."}},"plugin_section":[],"plugin_tags":[281575,281576,5418,286,11891],"plugin_category":[45],"plugin_contributors":[202338],"plugin_business_model":[],"class_list":["post-367610","plugin","type-plugin","status-publish","hentry","plugin_tags-finn","plugin_tags-norway","plugin_tags-product-feed","plugin_tags-woocommerce","plugin_tags-xml-feed","plugin_category-ecommerce","plugin_contributors-rimosfafora","plugin_committers-rimosfafora"],"banners":{"banner":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/banner-772x250.png?rev=3703263","banner_2x":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/banner-1544x500.png?rev=3703263","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/icon-128x128.png?rev=3703263","icon_2x":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/icon-256x256.png?rev=3703263","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/screenshot-1.png?rev=3703263","caption":"Your feed address, the health of the last build, one-click rebuild, and the products FINN will not receive with the reason for each."},{"src":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/screenshot-2.png?rev=3703263","caption":"Choosing what goes in the feed: variations, stock, a listing limit, the order, and excluded categories."},{"src":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/screenshot-3.png?rev=3703263","caption":"How products are described: description source, title suffix, category, brand, condition and extra attributes."},{"src":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/screenshot-4.png?rev=3703263","caption":"Optional contact details and location, plus rebuild and uninstall housekeeping."},{"src":"https:\/\/ps.w.org\/grainsoft-product-feed-for-finn-no\/assets\/screenshot-5.png?rev=3703263","caption":"The hosted feed in Google Shopping \/ RSS format, as FINN reads it."}],"raw_content":"<!--section=description-->\n<p>FINN.no is Norway's largest marketplace. Since Store Hub Connect, shops no longer upload\nlistings one at a time \u2014 instead, FINN <strong>reads a product feed from your own website<\/strong>, roughly\nevery two hours, and keeps your listings in step with your shop by itself.<\/p>\n\n<p>This plugin builds and hosts that feed.<\/p>\n\n<p>Turn it on, hand the address it gives you to FINN, and your WooCommerce catalogue becomes a set\nof FINN listings that update themselves. Change a price and it changes on FINN. Sell out and the\nlisting goes. Delete a product and the listing goes with it. You never export a file, never log\ninto an upload form, and never touch XML.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Hosts a valid feed at a secret address.<\/strong> Google Shopping \/ RSS format, which is what FINN\nrecommends and reads. Streamed straight to disk, so a catalogue of 20,000 products uses no more\nmemory than a catalogue of twenty.<\/li>\n<li><strong>Rebuilds itself hourly<\/strong>, and immediately whenever you save the settings.<\/li>\n<li><strong>Escapes everything.<\/strong> FINN rejects an entire feed over a single stray <code>&amp;<\/code>, <code>&lt;<\/code> or <code>&gt;<\/code> in one\nproduct description \u2014 not that product, the <em>whole feed<\/em>. Every value is written inside CDATA,\nincluding text that itself contains a CDATA terminator.<\/li>\n<li><strong>Tells you what FINN will not receive.<\/strong> Missing image, no price, no category \u2014 FINN silently\nskips those products and never tells you. This plugin lists them on the settings screen with the\nreason, linked straight to the product so you can fix it.<\/li>\n<li><strong>Puts you in charge of the order.<\/strong> FINN publishes in feed order until your plan's listing\nallowance runs out. Sort by newest, by price, by stock level, or by your own shop order, and set\na cap so you decide which products make the cut instead of FINN deciding for you.<\/li>\n<li><strong>Cleans up descriptions.<\/strong> FINN converts descriptions to plain text, so Gutenberg comments,\nshortcodes, <code>&lt;div&gt;<\/code> soup, scripts and tracking markup are stripped; paragraphs and lists survive.\nText over the limit is cut at a paragraph boundary, never mid-sentence and never mid-tag.<\/li>\n<li><strong>Respects the field limits.<\/strong> 80-character titles, 4,000-character descriptions, at most 32\nimages per product, prices rounded to whole kroner \u2014 all handled for you.<\/li>\n<li><strong>Publishes only HTTPS images.<\/strong> FINN cannot fetch images over plain HTTP, so an insecure image\nURL is treated as no image rather than as a broken listing.<\/li>\n<li><strong>Excludes what you do not want listed.<\/strong> Per product, per category, in bulk from the products\nlist, or by leaving out anything that is out of stock.<\/li>\n<li><strong>Handles variations<\/strong> \u2014 optionally as separate listings, each with its own attributes in the\ntitle, or as a single listing for the parent.<\/li>\n<li><strong>Everything in Norwegian and Polish<\/strong>, as well as English.<\/li>\n<\/ul>\n\n<h4>What you need first<\/h4>\n\n<p>This plugin is one half of the job. The other half is an agreement with FINN:<\/p>\n\n<ol>\n<li>You need a <strong>business account on FINN<\/strong> with a Torget shop plan.<\/li>\n<li>Your shop must be <strong>onboarded onto Store Hub Connect<\/strong> by FINN. You send them the feed address\nfrom this plugin, and together you agree how your categories map onto FINN's categories.<\/li>\n<li>FINN then starts reading the feed. Listings usually appear within a few hours.<\/li>\n<\/ol>\n\n<p>Installing this plugin alone will not put anything on FINN. It gives you the feed that makes the\nconversation with FINN possible.<\/p>\n\n<h4>Not affiliated with FINN.no<\/h4>\n\n<p>This is an independent plugin. It is not made, endorsed or supported by FINN.no AS or Schibsted.\n\"FINN\" and \"FINN.no\" are trademarks of their respective owner and are used here only to describe\nwhat the plugin is compatible with.<\/p>\n\n<h3>Support<\/h3>\n\n<p>This plugin is free and will stay free. If it saves you time, two ways to give something back:<\/p>\n\n<h4>Support the plugin's development<\/h4>\n\n<p><a href=\"https:\/\/suppi.pl\/damian-ziarnik\">suppi.pl\/damian-ziarnik<\/a> \u2014 a one-off tip that goes straight\ntoward keeping this plugin maintained and compatible with new WordPress and WooCommerce releases.<\/p>\n\n<h4>\ud83d\udee0\ufe0f Paid support<\/h4>\n\n<p>Need help getting your feed onboarded, mapping categories, or extending the feed with fields this\nplugin does not cover out of the box? Paid, priority support is available directly from the\ndeveloper: <a href=\"https:\/\/grainsoft.pl\/#kontakt\">grainsoft.pl<\/a>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores its settings in one option row and an opt-out flag on products you exclude. It\nwrites a feed file into your uploads folder containing the product information you have already\npublished in your shop. It collects no personal data, sets no cookies, and sends nothing anywhere.\nThe feed address is served with a <code>noindex<\/code> header.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active first.<\/li>\n<li>Go to <strong>WooCommerce \u2192 FINN feed<\/strong>.<\/li>\n<li>Copy the feed address shown at the top of the screen.<\/li>\n<li>Choose how many listings you want, in what order, and which categories to leave out.<\/li>\n<li>Save. The feed is built immediately.<\/li>\n<li>Send the address to your FINN contact and ask them to onboard your shop onto Store Hub Connect.<\/li>\n<\/ol>\n\n<p>That is the whole setup. From then on the plugin keeps the feed current and FINN keeps your\nlistings current.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20anything%20from%20finn%20before%20this%20is%20useful%3F\"><h3>Do I need anything from FINN before this is useful?<\/h3><\/dt>\n<dd><p>Yes. FINN has to know your feed exists and has to agree to read it. You need a business account\nwith a Torget shop plan, and FINN has to onboard you onto Store Hub Connect. The plugin produces\nthe feed; FINN decides when to start reading it.<\/p><\/dd>\n<dt id=\"how%20quickly%20do%20my%20changes%20reach%20finn%3F\"><h3>How quickly do my changes reach FINN?<\/h3><\/dt>\n<dd><p>The plugin rebuilds the feed every hour, and FINN reads it roughly every two hours. In practice a\nprice change shows up on FINN within a couple of hours. Nothing you do makes FINN read sooner \u2014\nthe schedule is theirs.<\/p><\/dd>\n<dt id=\"why%20is%20my%20feed%20address%20a%20long%20random%20string%3F\"><h3>Why is my feed address a long random string?<\/h3><\/dt>\n<dd><p>Because FINN's specification forbids protecting it any other way. The feed must be reachable\nwithout a login, an API key, an IP allow-list or a VPN, so the only thing standing between your\ncatalogue and the open internet is an address nobody can guess. Treat it as a secret. If it does\nget out, use <strong>Issue a new address<\/strong> \u2014 the old one stops working immediately, and you send the new\none to FINN.<\/p><\/dd>\n<dt id=\"is%20my%20catalogue%20therefore%20public%3F\"><h3>Is my catalogue therefore public?<\/h3><\/dt>\n<dd><p>Anyone who knows the address can read your product titles, descriptions, prices and images \u2014 the\nsame information already on your shop's public product pages. The feed contains nothing about\ncustomers or orders. It carries a <code>noindex<\/code> header so search engines will not list it.<\/p><\/dd>\n<dt id=\"why%20is%20a%20product%20missing%20from%20the%20feed%3F\"><h3>Why is a product missing from the feed?<\/h3><\/dt>\n<dd><p>Open <strong>WooCommerce \u2192 FINN feed<\/strong>. Any product that was left out is listed there with the reason.\nFINN requires a title, a price, a category and at least one publicly reachable HTTPS image; a\nproduct missing any of those cannot be listed. The usual culprit is an image on an HTTP URL, or a\nproduct with no category.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20description%3F\"><h3>Do I need a description?<\/h3><\/dt>\n<dd><p>No. If a product has no description, FINN falls back to the title. A real description will sell\nthe item better, but it is not required.<\/p><\/dd>\n<dt id=\"why%20is%20my%20description%20shorter%20on%20finn%20than%20in%20my%20shop%3F\"><h3>Why is my description shorter on FINN than in my shop?<\/h3><\/dt>\n<dd><p>FINN keeps 4,000 characters of plain text. If yours is longer, the plugin cuts it at the last\nparagraph that fits, so it never ends halfway through a sentence. FINN also strips all formatting\nexcept basic paragraphs and lists \u2014 headings, tables, columns and embeds are flattened, which is\nFINN's behaviour, not the plugin's.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20variable%20products%3F\"><h3>What happens to my variable products?<\/h3><\/dt>\n<dd><p>By default, one listing for the parent product. Turn on <strong>Publish each variation as its own\nlisting<\/strong> if you want each size or colour listed separately \u2014 but remember that each one counts\nagainst your FINN listing allowance, so a product with twelve variations uses twelve slots.<\/p><\/dd>\n<dt id=\"what%20if%20i%20have%20more%20products%20than%20my%20finn%20plan%20allows%3F\"><h3>What if I have more products than my FINN plan allows?<\/h3><\/dt>\n<dd><p>FINN publishes in feed order and stops when your allowance runs out, so whatever comes first wins.\nSet <strong>Maximum listings<\/strong> to your allowance and choose an order \u2014 most expensive first, newest\nfirst, most in stock first, or your own shop order \u2014 and you decide which products get listed\nrather than leaving it to chance.<\/p><\/dd>\n<dt id=\"how%20do%20i%20keep%20a%20product%20off%20finn%3F\"><h3>How do I keep a product off FINN?<\/h3><\/dt>\n<dd><p>Three ways, depending on scale: tick <strong>Exclude from FINN feed<\/strong> in the product's Advanced tab;\nselect several products in the products list and use the <strong>Exclude from FINN feed<\/strong> bulk action;\nor exclude a whole product category in the settings. Hidden products are always left out. Removing\na product from the feed removes its FINN listing at the next import.<\/p><\/dd>\n<dt id=\"how%20do%20prices%20work%3F\"><h3>How do prices work?<\/h3><\/dt>\n<dd><p>Prices are sent as Norwegian kroner and rounded to whole kroner, because that is what FINN's feed\nformat assumes. The plugin does not convert currency: if your shop prices in another currency, the\nnumber is sent as-is and FINN will read it as NOK. Use a currency plugin, or a shop priced in NOK,\nif that is not what you want.<\/p><\/dd>\n<dt id=\"what%20about%20sale%20prices%3F\"><h3>What about sale prices?<\/h3><\/dt>\n<dd><p>If a product is on sale, both the regular price and the sale price are sent, along with the sale\nperiod if you set one. FINN shows the discount.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20a%20multi-currency%20or%20multi-language%20shop%3F\"><h3>Does this work with a multi-currency or multi-language shop?<\/h3><\/dt>\n<dd><p>The feed contains one version of your catalogue: whatever the site produces for the plugin's\nrequests. Multi-currency and multi-language setups vary too much for a single answer, so test the\nfeed by opening its address before you send it to FINN.<\/p><\/dd>\n<dt id=\"does%20this%20send%20anything%20to%20finn%2C%20or%20to%20me%2C%20or%20to%20anyone%20else%3F\"><h3>Does this send anything to FINN, or to me, or to anyone else?<\/h3><\/dt>\n<dd><p>No. The plugin makes no outbound connections at all. It writes a file into your uploads folder and\nserves it when something asks for it. FINN comes to you.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20shop%3F\"><h3>Will this slow down my shop?<\/h3><\/dt>\n<dd><p>No. The feed is built once an hour in the background and written to disk; serving it is just\nsending a file. The build streams products in batches of 200, so memory stays flat however large\nyour catalogue is.<\/p><\/dd>\n<dt id=\"finn%20says%20my%20feed%20is%20invalid.%20what%20do%20i%20do%3F\"><h3>FINN says my feed is invalid. What do I do?<\/h3><\/dt>\n<dd><p>Open the feed address in a browser. If it downloads and displays as XML, it is well-formed and the\nproblem is more likely to be mapping \u2014 usually categories FINN has not been told how to interpret.\nIf your browser reports an XML error instead, that is a bug in this plugin, and the exact message\nyour browser shows is the most useful thing you can include in a support request.<\/p><\/dd>\n<dt id=\"my%20feed%20address%20returns%20404.\"><h3>My feed address returns 404.<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Permalinks<\/strong> and click Save. That rebuilds WordPress's rewrite rules, which\nsome hosts and caching layers drop.<\/p><\/dd>\n<dt id=\"can%20i%20change%20what%20the%20feed%20contains%3F\"><h3>Can I change what the feed contains?<\/h3><\/dt>\n<dd><p>Yes, in two ways. The settings screen covers description source, title suffix, category format,\nbrand, condition, and any extra product attributes you want to publish. For anything beyond that,\ndevelopers can use the <code>finn_feed_item<\/code> filter to change a mapped product before it is written, and\n    finn_feed_query_args to change which products are selected.<\/p><\/dd>\n<dt id=\"is%20there%20a%20premium%20version%3F\"><h3>Is there a premium version?<\/h3><\/dt>\n<dd><p>No. The plugin is free and complete. There is no upsell, no locked feature and no account to\ncreate.<\/p><\/dd>\n<dt id=\"which%20languages%20are%20included%3F\"><h3>Which languages are included?<\/h3><\/dt>\n<dd><p>English, Norwegian Bokm\u00e5l (nb_NO) and Polish (pl_PL).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<li>Store Hub Connect product feed hosted at a secret address, rebuilt hourly.<\/li>\n<li>Streaming XML writer with full CDATA escaping, including CDATA terminators inside product text.<\/li>\n<li>Skipped-product report with per-product reasons.<\/li>\n<li>Feed ordering and listing cap for shops with a limited FINN plan.<\/li>\n<li>Description cleanup with paragraph-boundary truncation.<\/li>\n<li>Per-product, per-category and bulk exclusion.<\/li>\n<li>Optional per-variation listings, contact details and location.<\/li>\n<li>Norwegian Bokm\u00e5l and Polish translations.<\/li>\n<\/ul>","raw_excerpt":"Publish your WooCommerce products on FINN Torget. This plugin hosts the product feed that FINN Store Hub Connect reads from your shop.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=367610"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rimosfafora"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367610"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367610"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367610"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367610"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367610"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}