Skip to content
feedlab Request early access

Feed format

XML (Atom 1.0)

Atom 1.0 feed

An Atom 1.0 product feed carries each product as an entry element directly inside the feed root, with attributes in the Google namespace. It is accepted wherever RSS is and is stricter about the elements wrapping the products, requiring a feed id, title and updated timestamp.

Specification

File extension
.xml .atom
Content type
application/atom+xml; charset=utf-8
Compression
Gzip is widely accepted and worth using, as with any XML feed.
One product is
A single feed root element with the Atom namespace declared as the default, containing a title, a self link, an updated timestamp and an id, followed by one entry element per product. Product attributes are child elements in the g: namespace.
Escaping
The same XML rules as RSS: escape ampersands, angle brackets and quotes, or use CDATA. Atom additionally requires the updated element to be a valid RFC 3339 timestamp and the feed id to be a stable IRI, and it will be rejected for getting either wrong.

A valid atom 1.0 feed

Two products, every required attribute, nothing omitted for brevity. Copy it and replace the values.

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
  <title>Northbound</title>
  <link rel="self" href="https://example.com/feeds/google.xml"/>
  <updated>2026-09-17T06:00:00Z</updated>
  <id>tag:example.com,2026:northbound-feed</id>
  <entry>
    <g:id>SHIRT-BLK-M</g:id>
    <g:title>Northbound Oxford Shirt, Black, Medium</g:title>
    <g:description>A long-sleeved Oxford shirt in 100% brushed cotton.</g:description>
    <g:link>https://example.com/products/oxford-shirt?variant=101</g:link>
    <g:image_link>https://cdn.example.com/oxford-black.jpg</g:image_link>
    <g:availability>in_stock</g:availability>
    <g:price>49.00 GBP</g:price>
    <g:brand>Northbound</g:brand>
    <g:gtin>05012345678900</g:gtin>
    <g:condition>new</g:condition>
    <g:item_group_id>SHIRT-OXFORD</g:item_group_id>
  </entry>
</feed>

Which channels accept it

Channel support for XML (Atom 1.0)
Channel Support Notes
Google Shopping Supported Accepted alongside RSS 2.0 and text feeds.
Meta Supported Accepted for a catalogue data feed.
Microsoft Advertising Supported Accepted alongside tab-delimited text.
Pinterest Supported Accepted for a scheduled data source.
OpenAI Not supported OpenAI takes Parquet, JSONL, CSV or TSV.

What breaks a atom 1.0 feed

The wrapper elements are mandatory, unlike in RSS

Atom requires a feed id, a title and an updated timestamp before it will validate. Generators that were written for RSS and switched over often omit them, and the resulting error is about the document rather than about the products, which makes it look unrelated to the feed content.

The updated timestamp must be RFC 3339

A date without a timezone, or in a local format, fails validation. It needs the full form with an offset or a trailing Z. It is also worth actually updating it on each generation, because it is the field a consumer uses to decide whether anything changed.

Two namespaces are in play at once

Atom is the default namespace on the root element and the Google namespace is prefixed. Declaring only one of them produces a document where either the wrapper or every product attribute is ignored, and the file still parses cleanly as XML.

Atom entry elements collide with Google ones

Atom defines its own title, link and id elements, and so does the product specification. Inside an entry, an unprefixed title is the Atom one and g:title is the product one. Mixing them is how a feed ends up with products that have no title according to the channel.

Frequently asked questions

What is the difference between an RSS and an Atom product feed?

Structurally, Atom puts entry elements directly inside the feed root while RSS nests item elements inside a channel. Atom is stricter: it requires a feed id, title and an RFC 3339 updated timestamp. Both are accepted by every channel that takes XML.

Why is my Atom feed rejected when the products look right?

Usually a missing or malformed wrapper element: no feed id, no updated timestamp, or a timestamp without a timezone. Atom validates the document around the products more strictly than RSS does.

Do I use title or g:title inside an entry?

g:title for the product attribute. An unprefixed title inside an entry is the Atom element, which the channel does not read as the product name, and that mix-up produces items with no title.

Should I choose Atom over RSS?

Only if something downstream already expects it. RSS 2.0 is more common for product feeds and has fewer ways to fail, and no channel documented here prefers Atom.

Related concepts

Primary sources

Channel specifications change. These are the official documents this page is based on.

Last reviewed View as markdown