I've been playing around with creating an app that I've really needed. But I don't have time to do it so I'm hoping we can work on it together. The idea is to take your shop products and repackage them to create feeds for use elsewhere, like Google Base, Amazon, NextTag etc.
I'm hoping this will end up as an "open source" forum thread where you can share your own feed format you've created so we all can benefit.
Basic How To:
1) Make an alternate version of [page] (for example called googlefeed)
2) Create a new page
3) Name whatever you'd like: google-base-product-feed
4) Once the page is created change the Template to googlefeed
Step By Step How To:
- http://forums.shopify.com/categories/2/posts/29008#comment-29549
Collaborators, Thanks:
- Michael Larkin: http://www.pixallent.com
- Caroline Schnapp: http://www.11heavens.com
- Jamie: http://www.charlestoncreative.com
Feed Specs:
- http://base.google.com/support/bin/answer.py?answer=58085
Snippets Used:
- shopdesc: a short description of your shop
Important Notes:
- If you're in the UK, you have to include VAT one way or another, by either putting "(including VAT)" or "(excluding VAT)" in the price field of your products (in Shopify, not the feed) and making the appropriate tax setup in your Google Base Settings.
{% layout none %}<?xml version="1.0" encoding="UTF-8" ?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>{{shop.name | escape }} Products</title>
<description>{% include 'shopdesc' %}</description>
<link>{{shop.url}}</link>
{% paginate collections.all-products.products by 1000 %}{% for product in collections.all-products.products %}
<!-- Item #{{ forloop.index }} -->
<item>
<title><![CDATA[{{ product.title | strip_html | strip_newlines | escape | replace: 'amp;', 'and' | replace: '&', 'and' | replace: "é", "e" | replace: "à ", "a" }}]]></title>
<g:brand>{{product.vendor | escape }}</g:brand>
<g:product_type>{{product.type | escape }}</g:product_type>
<g:id>{{product.id}}</g:id>
<g:condition>New</g:condition>
<description><![CDATA[{{ product.description | strip_html | strip_newlines | replace: 'amp;', 'and' | replace: '&', 'and' | replace: "..", ". " | replace: " ", " " | replace: "‘", "'" | replace: "’", "'" | replace: "‘", "'" | replace: "’", "'" | replace: "’", "'" | replace: "’", "'" | replace: "“", "'" | replace: "‘", "'" | replace: "´", "'" | replace: "“", """ | replace: "â€", """ | replace: "–", "-" | replace: "–", "-" | replace: "â€â€", "-" | replace: "–", "—" | replace: "—", "—" | replace: "%", "%" | replace: "©", "©" | replace: "®", "®" | replace: "â„¢", "™" | replace: "£", "£" | replace: "ï¿Â", "*" | replace: "•", "*" | replace: "â€Â", "'" | replace: "é", "e" | replace: "é", "e" | replace: "à ", "a" | replace: "ó", "o" | replace: "ê", "e" | replace: "Ø", "O" | replace: "™", "" | replace: "®", "" }}]]></description>
<g:image_link>{{product.featured_image | product_img_url: 'large'}}</g:image_link>
<link>{{shop.url}}{{product.url}}</link>
<g:price>{{product.price | money_without_currency}}</g:price>
<g:quantity>1</g:quantity>
<g:payment_accepted>Visa</g:payment_accepted>
<g:payment_accepted>MasterCard</g:payment_accepted>
<g:payment_accepted>AmericanExpress</g:payment_accepted>
<g:payment_accepted>Discover</g:payment_accepted>
<g:payment_notes>We also accept Paypal and Google Checkout</g:payment_notes>
</item>
{% endfor %}{% endpaginate %}
</channel>
</rss>
See it in action:
- http://www.fortunecookiesoap.com/pages/google-base-product-feed
For tab delimited formats like the yahoo product feed, each product must be on only one (1) line. The problem is that if the any product descriptions have line breaks in them that will break the formatting.
Solution!
{{ product.description | strip_newlines | strip_html }}
Yahoo Product Feed
—feed specs: http://searchmarketing.yahoo.com/shopsb/shpsb_specs.php
Snippets This Feed Uses:
—yahoocat: map your products to a yahoo category (can extend this to support multiple)
{% layout none %}code name description price product-url merchant-site-category medium image-url upc isbn brand manufacturer manufacturer-part-no model-no ean classification condition gender age-group age-range size nrf-size color nrf-color msrp in-stock availability promo-text shipping-price shipping-weight shipping-surcharge shipping-class{% paginate collections.all-products.products by 200 %}{% for product in collections.all-products.products %}{% if product.type != 'Sample' %}
{{product.id}} {{product.title | strip_html | replace: '–', '' | replace: '—', '' | replace: '‘', '' | replace: '’', '' | replace: '“', '' | replace: '”', '' | replace: '…', '' }} {{ product.description | strip_html | replace: '–', '' | replace: '—', '' | replace: '‘', '' | replace: '’', '' | replace: '“', '' | replace: '”', '' | replace: '…', '' }} {{ product.price | money_without_currency }} {{shop.url}}{{product.url}} {% include 'yahoocat' %} {{product.featured_image | product_img_url: 'large'}} {{product.vendor}} New New Yes 1 Free shipping for orders over $49 {% endif %}{% endfor %}{% endpaginate %}
See it in action: http://www.fortunecookiesoap.com/pages/yahoo-product-feed
RSS Feed (2.0)
—feed specs: http://en.wikipedia.org/wiki/RSS
Snippets This Feed Uses:
—shopdesc: a short description of your shop
{% layout none %}<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="rss.css" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ shop.name }}</title>
<link>{{ shop.url }}</link>
<description>{% include 'shopdesc' %}</description>
<image>
<link>{{ shop.url }}</link>
<url>{{ shop.url }}/feedlogo.jpg</url>
<title>{{ shop.name }}</title>
</image>
<language>en-us</language>
<copyright>Copyright {{ "now" | date: "%Y" }} {{ shop.name }}</copyright>
<atom:link href="{{shop.url}}/pages/rss" rel="self" type="application/rss+xml" />
{% paginate collections.all-products.products by 200 %}{% for product in collections.all-products.products %}{% if product.type != 'Sample' %}<item>
<title><![CDATA[{{ product.title | strip_html }}]]></title>
<guid>{{ shop.url }}{{ product.url }}</guid>
<description><![CDATA[{% for image in product.images limit: 1 %}<p><img src="{{ image | product_img_url: 'medium' }}"
alt="{{ product.title | strip_html }}" /></p>{% endfor %}<p><a href="{{ shop.url }}{{ product.url }}">
{{ product.title | strip_html }}</a></p>
<p><strong>{{ product.price_min | money }}{% if product.price_varies %} -
{{ product.price_max | money }}{% endif %}</strong></p>
<p>{{product.description | strip_html | truncatewords: 150}}</p>]]></description>
</item>
{% endif %}{% endfor %}{% endpaginate %}
</channel>
</rss>
JSON Feed
—feed specs: http://www.json.org
—FYI I wrapped the JSON in a ”.d” property to protect against a particularly nasty XSS vulnerability:
http://haacked.com/archive/2009/06/25/json-hijacking.aspx
(don’t really need to but it’s a good habit for js arrays)
Snippets This Feed Uses:
—none
{% layout none %}{d:[{% paginate collections.all-products.products by 200 %}{% for product in collections.all-products.products %}{% if product.type != 'Sample' %}{{ product | json }}{% unless forloop.last %},{% endunless %}{% endif %}{% endfor %}{% endpaginate %}]}
We will be releasing a completely revamped version of http://www.synctobase.com soon that will address syncing with many product directories in the very near future, and will continually add new directories after the initial relaunch.
That’s fantastic! I use synctobase already, and I very happily to donate to keep it running. I use these ‘hacks’ to supply feeds to 14 different services. One thing I’d love you to support with synctobase is a way to filter/control what products get synced. It’s an awesome service you have created keep up the good work.
Glad I didn’t waste my time writing a “Feedify” app! :)
Awesome!
Your request for product control is actually part of the next release, so I’m glad that will be of help to you. We also will be allowing you to control what product attributes are sent as well.
There are many other features as well, so stay tuned!
I had planned for my app that users could supply their own feed format and share it with others… crowdsourcing that work would ramp up list of supported directories very quickly (any plans for something like that?)
Hadn’t thought of doing it that way primarily because our system has to be able to communicate with the directory service via their API first. So even with a provided feed format, there’s no way for us to validate and sync it yet.
We will be requesting what services you’d like integration for and we’ll handle the feed format on our end. Any in particular you’re looking for?
Make sense?
Synctobase was created as an automated process that uses the shopify api to distribute product information to a third party via their api. That is totally awesome, and needed – but there are many more services that while they do allow bulk updates they (for whatever reason) are not set up to automate the process in that way. For example Amazon, NextTag, Pronto and Yahoo allow for bulk uploads/changes but you have to manually login and upload them or FTP them to a server they maintain. So while you may need to manually upload it still saves you a lot of work. You can simply open Excel click on Data > Import External Data > New Web Query and navigate to your “feed” for that service and save the file. No cut-n-pasting hundreds of data points into the right columns – no mistakes.
With other services like Shopzilla.com, Become.com or Smarter.com all you need is to supply them with the url of the feed and they will take care of syncing it for you.
I think it’s very useful just to be able to format the data in a shopify store as needed.
It can even be useful for the shop owner… I know for me I use a “tag feed” where I get all the tags for each product so I can dynamically calculate what products to recommend for cross-selling (what products have the most matching tags to the product the customer is currently looking at).
User | Count |
---|---|
542 | |
209 | |
126 | |
80 | |
44 |