Google Merchant feedDevelopment & Customization

A Google Apps Script that builds a Google Merchant Center product feed from your own product sheet

Usually ready in 15 minutesRevisions includedQuality check
Packages
Payment protectionDetails
  • Revisions within the package are free.
  • If you do not respond within 3 days of delivery, the work is accepted automatically.

The money is reserved when you pay and released only once you accept the work.

A Google Apps Script that builds a Google Merchant Center product feed from your own product sheet

Example result

Example for the Standard package

Merging the monthly sales files of 9 shops into one Excel report

How it is run

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Folder: sales/2026-10, 9 files found
2026-11-02 09:14:03 INFO  shop-01.csv: 1,284 rows
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 rows
2026-11-02 09:14:04 WARN  shop-07.csv: 3 rows without a price skipped (lines 88, 412, 913)
2026-11-02 09:14:05 INFO  Done: 10,412 rows -> report-2026-10.xlsx (sheets "Sales" and "Totals")

Settings, not code

The column names of each shop live in settings.ini, so a new shop or a renamed column is a line there:

[columns]
date = Date, Sale date, Day
product = Product, Item, Name
quantity = Qty, Quantity, Pcs
price = Price, Unit price

A part of the code

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Reads one shop's file and gives it the report's column names."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: no column for '{name}' (looked for {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Files: a ZIP archive with merge_sales.py (310 lines), settings.ini, requirements.txt and a README with installing Python, running the script and what each message in the log means. The client runs it on their own computer.

Client: a small chain of 9 stationery shops; each shop sends its sales for the month as a CSV or Excel file, with slightly different column names. Task: one script that reads every file in a folder, brings the columns to one shape, and writes a single Excel report with all sales and a sheet of totals by shop.

The client and all details are made up.

About this service

Google Merchant Center can read products straight from a Google Sheet, but only with its own fields: id, title, description, link, image_link, availability, price with a currency code, brand, gtin and so on. This Google Apps Script takes your product sheet, laid out the way you work, and builds a separate Feed tab in that format: it writes prices as 19.99 USD, turns In stock or 0 into the words Merchant Center accepts, trims titles to its length limit and, from Standard, lists rows with a missing link, picture or price before you send them. You connect the Feed tab in Merchant Center yourself. The facts come from your sheet and must match your site; Google reviews every product, so approval is not something anyone can promise.

What is included

  • What you getA ZIP archive with the Apps Script code and a README that shows how to add it to your sheet and connect the Feed tab in Merchant Center; the code is also shown on the order page.
  • Merchant Center fieldsid, title, link, image_link, price, availability and more
  • Your sheet stays yoursThe feed is built on a separate tab
  • Values it acceptsPrices with currency, availability in its words
  • Problems before uploadFrom Standard, rows missing required fields are listed
  • Readable codeWith comments, easy to add a field later

How it works

  1. 1
    SheetYou send the columns of your product sheet and your shop's country and currency
  2. 2
    CodeWe write the script and the guide to installing it
  3. 3
    Try itYou build the feed and connect it in Merchant Center
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

The column names of your product sheet with 10-20 rows (copy from your real catalogue or make them up), the country and currency you sell in, how stock is shown (a number, In stock, Yes or No) and whether products have sizes or colours as separate rows. Brands and barcodes (GTIN) if you have them, shipping and tax details if Merchant Center asks you for them in the feed, and whether you use the sheet in a Google account you can edit.

We will ask you:

  • What does your product sheet look like?
  • Where do you sell?
  • Do products have variants?

Compare packages

PackagesBasicFeed tab$16StandardFeed with settings$33PremiumFeed tool$67
Deadline1 day2 days3 days
Revisions123
Codeup to 150 linesup to 400 linesup to 1,000 lines
Files of code1up to 3up to 8
Settings fileNoYesYes
Clear error messages and a logNoYesYes
Run options and a guide to running it on a scheduleNoNoYes
Guide to installing and running it (README)YesYesYes
LanguageGoogle Apps ScriptGoogle Apps ScriptGoogle Apps Script
Order BasicOrder StandardOrder Premium

Payment protection

You pay when you order, but the money is released only for accepted work.

  • Fixed priceThe package price does not change after you pay.
  • The money is reservedWhen you pay, the amount is only reserved. It is released to the service once you accept the work.
  • Checked before deliveryEvery result goes through a quality check before it reaches you, and you see it on the order page before accepting it.
  • Free revisionsAsk for changes within your brief as many times as the package allows.
  • Acceptance after 3 daysIf within 3 days of delivery you neither accept the work nor ask for changes, it is accepted automatically. If you write in the order chat after delivery, the order waits; once we answer, we may start the 3 days again and will say so in the chat.
  • Redo or a full refundIf the result does not match your brief and the revisions did not fix it, or the work takes more than twice its deadline, write in the order chat: we will redo the work or refund the payment in full.
How it works →

Questions and answers

Will my products be approved?

We cannot promise it: Google reviews every product by its own rules, including your site and policies. The script makes the feed match Merchant Center's format and shows missing fields; the facts are yours.

Does Merchant Center update the feed by itself?

Merchant Center can fetch a Google Sheet feed on its own schedule. The script rebuilds the Feed tab when you press the button, or, with Premium's guide, on a time trigger before that.

Can it take products from my Shopify or WooCommerce shop?

This offer builds the feed from a Google Sheet. If your products are in a shop, export them to the sheet first; loading them through the shop's API is a separate job.

Do you get access to Merchant Center?

No. You add the script to your sheet and connect the feed in your own Merchant Center account. We never log in.

Did not find your answer?

Packages