If you sell residential house plans on a Shopify site, you already know that getting your plans in front of the right buyers is half the battle. Google Shopping and Microsoft Shopping can put your designs right where people are searching for their dream home. The catch? Keeping those product feeds accurate and up to date can feel like a part-time job.
The good news is that you can hand most of that work to Google Sheets. With a few small scripts and daily triggers, your Shopify catalog can flow into a Google Merchant Center feed, get smarter product titles along the way, and even be reshaped for Microsoft Merchant Center. Once it is set up, it runs quietly in the background while you get back to designing.
Why Use Google Sheets for Your Shopping Feed?
Shopify has apps that push products to Google, and many of them work fine. But house plans are not typical products. A generic feed app usually sends your Shopify product title as is, and a title like "The Willow Creek" tells a shopper almost nothing.
Google Sheets gives you full control. You decide which fields go into the feed, how titles are built, and what gets filtered out. It is free, it lives in the cloud, and Google Merchant Center can read a Google Sheet directly as a product data source. Google states that a linked sheet is fetched automatically every 24 hours, which pairs perfectly with a daily refresh from Shopify.
Step 1: Pull Your Shopify Product Data into Google Sheets
The first script lives in Apps Script, the coding tool built into every Google Sheet (Extensions > Apps Script). Its job is to call the Shopify Admin API and write your products into a sheet.
To connect, you will need an app with permission to read your products, and this part of the process changed recently. As of January 1, 2026, Shopify no longer lets you create new custom apps from the Develop apps screen in your store admin. Older custom apps you already have keep working, but new ones are built in the Shopify Dev Dashboard and connect with OAuth instead of a permanent access token.
Setting one up only takes a few minutes. Open the Dev Dashboard from the Develop apps area of your store admin or from your Shopify Partner account, and create a new app with a clear name like “Merchant Center Feed.” In the app’s version settings, add the read_products and read_product_listings scopes, then release that version and install the app on your store. If you are asked how the app will be distributed, choose custom distribution and select your store.
Once the app is installed, copy the Client ID and Client Secret from the app’s settings in the Dev Dashboard. Save both, along with your store’s myshopify.com domain, in the script’s Project Properties rather than pasting them into the code. That keeps your credentials out of sight if you ever share the sheet.
function getShopifyToken() {
var props = PropertiesService.getScriptProperties();
var shop = props.getProperty('SHOP_DOMAIN'); // your-store.myshopify.com
var res = UrlFetchApp.fetch('https://' + shop + '/admin/oauth/access_token', {
method: 'post',
payload: {
grant_type: 'client_credentials',
client_id: props.getProperty('SHOPIFY_CLIENT_ID'),
client_secret: props.getProperty('SHOPIFY_CLIENT_SECRET')
}
});
return JSON.parse(res.getContentText()).access_token;
}
Pass that token in the X-Shopify-Access-Token header on each API request, and your daily runs will always have a valid key. One note if you manage stores for clients: the client credentials grant only works for stores in the same organization as the app, so a client’s store would use a custom distribution install link instead.
From there, the script uses UrlFetchApp to request your products, including their variants, images, prices, and metafields. The GraphQL Admin API is a great fit here because you can ask for exactly the metafields you need in a single request. The script then clears the feed tab and writes one row per plan, with columns that match Google's required attributes: id, title, description, link, image_link, price, availability, brand, and condition.
A few helpful touches make a big difference. Skip any products that are drafts or archived, so only live plans make it into the feed. Format prices with the currency code, like "1295.00 USD". And build each link from your store domain plus the product handle, so every row points to the right plan page.
Step 2: Build Better Titles with Shopify Metafields
This is where house plan designers can really pull ahead. Your Shopify metafields probably already hold the details buyers search for: square footage, bedrooms, bathrooms, garage bays, and architectural style. Instead of letting that data sit on the product page, use it to build a title that matches real searches.
Think about how people actually shop for plans. They type things like "3 bedroom modern farmhouse plan with 2 car garage" or "2,400 sq ft craftsman house plan." A title built from your metafields can mirror that language exactly.
Here is a simple title-building function you can adapt:
function buildTitle(p) {
var parts = [
p.style + ' House Plan',
p.sqft + ' Sq Ft',
p.beds + ' Bed',
p.baths + ' Bath',
p.garage ? p.garage + ' Car Garage' : '',
p.name
];
return parts.filter(String).join(' | ').slice(0, 150);
}
That turns "The Willow Creek" into something like "Modern Farmhouse House Plan | 2,450 Sq Ft | 4 Bed | 3.5 Bath | 2 Car Garage | The Willow Creek." Now Google knows exactly what you are selling, and so does the shopper.
A few title tips to keep in mind. Google allows up to 150 characters, but shoppers often see only the first 70 or so, so put the most searched details up front. Style and square footage tend to be strong leaders for house plans. Avoid all caps and promotional words like "sale" or "best," since those can get products disapproved. And if a metafield is empty, let the function skip it gracefully so you never end up with a title like "0 Car Garage."
You can apply the same idea to other fields. Use your style metafield for product_type, or map stories and foundation type into custom labels so you can group plans in your ad campaigns.
Step 3: Connect the Sheet to Google Merchant Center
Once your feed tab looks good, open Google Merchant Center, go to your data sources, and add a new product source using Google Sheets. Choose your existing spreadsheet and the correct tab. Merchant Center will fetch it on a daily schedule, and any changes your script makes will be picked up automatically.
Check the diagnostics page after the first fetch. It will flag missing attributes, image problems, or pricing mismatches so you can fine-tune the script before you scale up.
Step 4: Adapt the Feed for Microsoft Merchant Center
Microsoft Shopping reaches buyers on Bing and its partner sites, and it is often less competitive than Google. Since you already have a clean feed, there is no reason to build a second one from scratch.
Instead, add a second script that reads your Google feed tab and writes a Microsoft-ready version to a new tab. Microsoft Merchant Center uses many of the same attribute names, so most columns copy straight across. The script is the place to handle the differences: rename or drop any columns Microsoft does not accept, add fields Microsoft expects, and clean out tabs, line breaks, or odd characters in descriptions. That cleanup matters because Microsoft feeds are tab-delimited files.
To deliver the feed, publish that tab to the web as tab-separated values (TSV) and paste the published URL into Microsoft Merchant Center as a scheduled download. Microsoft can download it daily, weekly, or monthly. Choose daily so it stays in step with your Google feed.
Step 5: Make It All Run Automatically with Daily Triggers
Here is where the magic happens. Apps Script time-driven triggers let you run your functions on a schedule without lifting a finger. Set one trigger to run your Shopify import early in the morning, and a second to run the Microsoft conversion an hour or two later.
You can create triggers from the clock icon in the Apps Script editor, or with a few lines of code:
ScriptApp.newTrigger('updateGoogleFeed')
.timeBased().atHour(2).everyDays(1).create();
ScriptApp.newTrigger('buildMicrosoftFeed')
.timeBased().atHour(4).everyDays(1).create();
Triggers run within about an hour of the time you pick, so leave a little breathing room between steps. It is also smart to turn on failure notifications in the trigger settings so you get an email if something ever goes wrong, like an expired token.
Wrapping Up
With this setup, a new plan published on Shopify in the afternoon can land in your Google and Microsoft Shopping feeds by the next morning, complete with a keyword-rich title built from your own metafield data. Price changes, new images, and retired plans all flow through without manual edits.
For house plan designers, that means less time wrestling with spreadsheets and more time doing what you love. Start small with a handful of plans, test your titles, and let your daily triggers do the heavy lifting. Your future self, and your shopping campaigns, will thank you.
0 comments