Upload a product CSV to /tools
How to bring a product catalogue into /tools from a spreadsheet, including which columns matter, how the upload is mapped and enriched, and when a one-off upload beats a live connection.
If your products live in a spreadsheet, or you just want to try /tools on an export before wiring up a live connection, you can upload a CSV. /tools reads it, maps your columns to Google's fields, enriches the result, and gives you a Merchant Center-ready feed URL. It's the quickest way to start, and a snapshot rather than a live link.
When a CSV upload is the right choice
A CSV upload is the fastest way to get products into /tools, and it's the right choice in two situations:
- Your catalogue genuinely lives in a spreadsheet, with no ecommerce platform behind it, or a platform that can't produce a usable feed URL.
- You want to try /tools on a real export first: see your Feed Health Score and what enrichment does to your data before committing to a live connection.
The trade-off is that an upload is a snapshot, not a live link. It reflects your file at the moment you uploaded it and won't change when your prices or stock move; you re-upload to refresh. If you want your enriched feed to keep pace with a changing catalogue on its own, connect a live source instead:
| You have… | Best connection |
|---|---|
| A Shopify store | Connect Shopify |
| A live feed URL from any platform | Connect a feed URL |
| A one-off spreadsheet, or a trial export | Upload a CSV (this guide) |
Preparing your spreadsheet
Save your products as a .csv with a header row and one row per product (or per variant, if you sell variants). One column per attribute. /tools maps your headers for you, so you don't need Google's exact column names: but clean, consistent headers map more accurately.
The columns that matter
You don't need every column to start. This is roughly the order of usefulness:
| Column | Why it matters |
|---|---|
| id | Required. A unique, stable identifier per row: /tools uses it to track each product across re-uploads. |
| title | Required. Even a rough title gives enrichment something to build a Google-ready title from. |
| price and availability | Keeps your feed truthful against your landing page: the top cause of disapprovals. |
| image link | A working primary image URL per product. Google won't show a product without one. |
| link | The product's landing page URL. |
| brand, GTIN, MPN | Identifiers are the single heaviest factor in feed quality. Include them if you have them; enrichment can recover many GTINs where they're missing. |
| description, colour, size, category | The more you provide, the less enrichment reconstructs: and the higher your starting score. |
Missing columns aren't a blocker. Enrichment fills what it can confidently determine and lists the products it couldn't, so you always know what's left.
Deep dive How your upload is read, mapped and enriched
When you upload, /tools parses the file, detects its delimiter (comma or tab), and reads the header row to identify your columns. It then maps each column to the corresponding Google field: matching on common header names and on the shape of the data in each column, so a column called barcode, ean or gtin all map to the identifier field. You review that mapping before anything runs, and you have the final say on any column it wasn't certain about.
Enrichment then works on the mapped data non-destructively. Your uploaded values are the base; the fields /tools improves or adds (normalised titles, specific Google product categories, recovered identifiers, cleaned attributes) live in a supplemental layer above them. Your original file is never modified, and the enriched output is assembled into a single feed served at your feed URL. Because a CSV is a snapshot, that layer is rebuilt each time you re-upload: /tools matches rows by id, so a re-upload updates prices and stock while keeping enrichment intact for products that haven't changed.
After uploading
Once your columns are mapped, run your first enrichment and review the result: see Your first enrichment run. You'll get a Feed Health Score and a feed URL for Merchant Center.
When your catalogue changes, upload a fresh file to refresh. And if you find yourself re-uploading often, that's the signal to move to a live feed URL so refreshes happen on their own.
Step by step
- Prepare your spreadsheet. Export your products to CSV with one row per product (or per variant) and a header row. One column per attribute: id, title, price, image link and so on.
- Open Connections and choose Upload CSV. Log in at tools.rp.ltd, open your store, go to Connections and choose "Upload a CSV".
- Upload the file. Drag in your .csv file. /tools reads it, counts the rows, and shows the columns it detected.
- Map your columns. /tools maps your headers to Google's fields automatically. Review the mapping, fix anything it wasn't sure about, and confirm the required fields are matched.
- Run enrichment and get your feed URL. Run enrichment. /tools scores the result, fills the gaps it can, and gives you a stable feed URL for Merchant Center.
Frequently asked questions
What columns do I actually need?
At minimum, a unique id and a title. The more you can include, such as price, availability, image link, brand and GTIN, the less enrichment has to reconstruct and the higher your starting score. Missing fields aren't a blocker; /tools fills what it confidently can and lists what it couldn't.
Will a CSV upload stay up to date?
No, an upload is a snapshot of the file at the moment you uploaded it. When your prices or stock change, you re-upload. If you need your enriched feed to track a live source, connect a feed URL or Shopify instead.
Does uploading change my spreadsheet or store?
No. /tools reads the file and enriches into its own supplemental layer. Your spreadsheet, and whatever system produced it, are never touched.