
Google Ads Ecommerce
- 90 installs
- 41 repo stars
- Updated March 13, 2026
- finsilabs/awesome-ecommerce-skills
Build and optimize Google Ads for ecommerce with Performance Max, Merchant Center feeds, conversion tracking, and Smart Bidding for ROAS.
About
Structures a Google Ads account around Performance Max and reliable conversion tracking via Google Tag. A developer uses it to launch a new account, fix under-reporting conversions, or migrate to PMax.
- Conversion tracking as the foundation before campaign optimization
- Enhanced Conversions and Smart Bidding for ROAS
Google Ads Ecommerce by the numbers
- 90 all-time installs (skills.sh)
- Ranked #1,160 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill google-ads-ecommerceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 90 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 13, 2026 |
| Repository | finsilabs/awesome-ecommerce-skills ↗ |
What it does
Build and optimize Google Ads for ecommerce with Performance Max, Merchant Center feeds, conversion tracking, and Smart Bidding for ROAS.
Files
Google Ads Ecommerce
Overview
Google Ads captures high-intent buyers at the bottom of the funnel through Shopping ads and Search. A well-structured account combines Performance Max (PMax) for automated coverage and conversion tracking via Google Tag. Reliable conversion tracking is the foundation everything else depends on — before optimizing campaigns, ensure your purchase conversion tag is firing correctly.
When to Use This Skill
- When launching a new Google Ads account for an ecommerce store
- When conversion tracking is broken or under-reporting (common after iOS/browser changes)
- When implementing Enhanced Conversions to recover lost signal
- When setting up Google Merchant Center for the first time
- When migrating from Standard Shopping to Performance Max campaigns
- When diagnosing why Smart Bidding is not spending the budget efficiently
Core Instructions
Step 1: Connect your store to Google
Every platform has a native Google integration — start here before touching the Google Ads interface.
---
Shopify
1. Go to Shopify Admin → Sales Channels → Google and install the Google & YouTube channel app 2. Connect your Google Ads account and Google Merchant Center account 3. Shopify automatically creates the Google product feed and syncs inventory in real time 4. Go to Google & YouTube → Overview → Conversion Tracking and verify the purchase conversion tag is connected 5. This channel handles the Google Tag installation, product feed, and basic conversion tracking automatically — no manual tag setup required for most stores
For Enhanced Conversions (recovers signal lost to cookie restrictions): 1. In your Google Ads account, go to Goals → Conversions → Settings → Enhanced Conversions 2. Enable Enhanced Conversions for Web 3. In Shopify, the Google channel app sends hashed customer email alongside purchase events automatically
---
WooCommerce
1. Install the Google Listings & Ads plugin (free, official Google plugin) from the WordPress plugin directory 2. Go to WooCommerce → Google Listings & Ads and connect your Google account 3. The plugin automatically creates a product feed for Google Merchant Center and installs conversion tracking 4. For Enhanced Conversions: install Google Tag Manager plugin and configure EC through GTM (see Custom/Headless section for GTM setup)
Alternative: install WooCommerce Google Analytics plugin and manually add the purchase conversion event tag.
---
BigCommerce
1. Go to BigCommerce Admin → Channel Manager → Google Shopping 2. Connect your Google Merchant Center account — BigCommerce automatically generates the product feed 3. For conversion tracking: go to BigCommerce → Advanced Settings → Google Analytics and add your Google Tag (gtag.js) ID 4. Or install the Google Tag Manager app from the BigCommerce App Marketplace and configure conversion tracking in GTM
---
Custom / Headless
Add Google Tag (gtag.js) to every page and fire the purchase conversion on the confirmation page:
<!-- In <head> — replace AW-CONVERSION_ID with your account ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-CONVERSION_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'AW-CONVERSION_ID');
</script>On the order confirmation page, fire the purchase conversion:
// Include user_data BEFORE the conversion event for Enhanced Conversions
gtag('set', 'user_data', {
email: order.customerEmail, // Google hashes client-side
phone: order.customerPhone,
address: {
first_name: order.customerFirstName,
last_name: order.customerLastName,
postal_code: order.shippingAddress.zip,
country: order.shippingAddress.countryCode,
},
});
gtag('event', 'conversion', {
send_to: 'AW-CONVERSION_ID/CONVERSION_LABEL',
value: order.subtotal,
currency: order.currencyCode,
transaction_id: order.id, // prevents duplicate counting
new_customer: order.isFirstOrder,
});For maximum signal reliability, deploy a server-side Google Tag Manager container — this bypasses browser ITP/cookie restrictions. Contact Google or a certified GTM partner to deploy sGTM.
Step 2: Set up Google Merchant Center
1. Create a Merchant Center account at merchants.google.com 2. Verify and claim your domain under Business Information → Website 3. If using Shopify or WooCommerce with the official plugins, the product feed is already connected — go to Products → Feeds to verify the sync is active 4. For custom/headless stores, see @google-shopping-feed for feed generation 5. Check Products → Diagnostics for disapproved products and fix issues before launching campaigns
Step 3: Create a Performance Max campaign
In Google Ads (ads.google.com):
1. Go to Campaigns → New Campaign → Sales 2. Select Performance Max as the campaign type 3. Set budget: minimum $50/day to start; the algorithm needs data 4. Set a conservative Target ROAS to start: if you need 4x ROAS, set 300% initially and increase after 2 weeks of data 5. Create asset groups organized by product category:
Asset Group 1: Bestsellers
Final URL: /collections/bestsellers
Headlines (15): focus on social proof — "Top Rated", "5-Star Reviews", "#1 Bestseller"
Images: product lifestyle shots + white-background product images (both required)
Videos: 15s and 30s product demos (upload at least one)
Audience signals: Past purchasers (upload customer list), Product viewers (7-day list)
Asset Group 2: New Arrivals
Final URL: /collections/new
Headlines: "Just Dropped", "New for [Season]", "Shop the Latest"
Audience signals: Instagram engagers, fashion/lifestyle interest segments
Asset Group 3: Sale / Clearance
Final URL: /collections/sale
Headlines: "Up to 50% Off", "Final Sale", "Limited Time"6. Under Audience Signals, upload your customer email list (from Klaviyo or Shopify) to create a seed audience for lookalike targeting
Step 4: Configure Smart Bidding correctly
Smart Bidding requires conversion data to optimize. Do not set ROAS targets until you have 30+ conversions in the last 30 days.
Ramping schedule:
- Week 1: Set to "Maximize Conversion Value" (no ROAS target) — let the algorithm learn
- Week 2: Review actual ROAS. If it is above your target, set a ROAS target at 80% of actual
- Week 4+: Gradually increase ROAS target by 10% every week until you find the efficiency-volume balance
Conversion Value Rules — set these to bias the algorithm toward new customers: 1. In Google Ads, go to Goals → Conversions → Conversion Value Rules 2. Add a rule: "New customer" → Multiply conversion value by 1.3 3. This trains the algorithm to prefer acquiring new customers over retargeting existing ones
Step 5: Monitor and optimize weekly
| Metric | Action if off target |
|---|---|
| Impression Share lost to budget | Increase daily budget |
| Impression Share lost to rank | Improve product feed quality (titles, images); increase ROAS ceiling |
| PMax spending on branded queries | Add brand terms as campaign-level negative keywords |
| Low conversion rate on Shopping | Check that landing page price matches feed price exactly; fix product page CRO |
In Google Ads: Reports → Predefined Reports → Shopping → Shopping performance by product — identifies which specific products have the highest ROAS and which are wasting budget.
Best Practices
- Use transaction_id on every purchase conversion — prevents duplicate conversion counting from page refreshes
- Enable Enhanced Conversions before launching Smart Bidding — the algorithm needs quality signal; missing data causes erratic spend
- Check feed quality in Merchant Center Diagnostics weekly — feed quality is the #1 Shopping ranking factor; missing GTINs and poor titles hurt impression share
- Exclude branded queries from PMax — add brand terms as negative keywords at the campaign level so you are not paying for branded searches that would convert anyway
- Provide all available product images — products with 3+ images get higher quality scores and better ad placement
- Set campaign budgets at 3–5x your target CPA initially — underfunded campaigns prevent the algorithm from accumulating the data it needs to optimize
Common Pitfalls
| Problem | Solution |
|---|---|
| Double-counting conversions | Add transaction_id to the conversion tag and enable "Deduplicate conversions" in Google Ads conversion settings |
| PMax spending all budget on branded queries | Add brand terms as campaign-level negatives or run a separate branded Search campaign at higher priority |
| GMC feed disapproved | Check Merchant Center Diagnostics; most common: missing GTIN, price mismatch with website, broken image links |
| Smart Bidding enters "limited" status | Ensure 30+ conversions in the last 30 days; temporarily switch to Maximize Conversion Value to accumulate data |
| Enhanced Conversions match rate under 30% | Send email in lowercase trimmed format; include phone and address for higher match probability |
Related Skills
- @google-shopping-feed
- @meta-ads-integration
- @marketing-attribution-dashboard
- @ecommerce-seo
- @conversion-rate-optimization
{
"context": "Tests whether the agent designs a campaign structure that correctly uses campaign priorities (Standard Shopping high, PMax low), excludes brand from PMax, applies correct tROAS ramp strategy, uses audience signals (not restrictions) in PMax, organizes PMax asset groups by product category, sets up a Brand Search campaign with TIS, adds negative keywords in the right places, and prescribes enabling Enhanced Conversions before Smart Bidding.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Standard Shopping priority: High",
"max_score": 7,
"description": "Standard Shopping campaign is assigned High priority (not medium or low)"
},
{
"name": "PMax priority: Low",
"max_score": 7,
"description": "Performance Max campaign is assigned Low priority (so Standard Shopping wins auctions first)"
},
{
"name": "Brand excluded from PMax",
"max_score": 8,
"description": "Brand terms (e.g., 'NovaPet') are added as negative keywords at the PMax campaign level OR a separate high-priority brand Search campaign is recommended to prevent PMax from consuming branded budget"
},
{
"name": "Negative brand keywords on Shopping",
"max_score": 9,
"description": "Brand name negative keywords are added to the Standard Shopping campaign to route brand queries to the Search campaign"
},
{
"name": "PMax asset groups by category",
"max_score": 8,
"description": "Performance Max campaign contains multiple asset groups organized by product category (e.g., one for premium food/subscriptions and one for accessories, or similar category-based segmentation)"
},
{
"name": "Audience signals not restrictions",
"max_score": 8,
"description": "PMax audience configuration uses audience signals (to inform the algorithm) rather than audience restrictions — the document explicitly distinguishes between signals and restrictions, or instructs to use signals only"
},
{
"name": "Brand Search TIS 95%+",
"max_score": 7,
"description": "Brand Search campaign uses Target Impression Share bidding strategy with a target of 95% or higher at top of page"
},
{
"name": "Category Search negative keywords",
"max_score": 8,
"description": "Category/non-brand Search campaigns include negative keywords for irrelevant traffic (e.g., jobs, careers, free, DIY, homemade, or similar)"
},
{
"name": "tROAS ramp-down plan",
"max_score": 8,
"description": "The Smart Bidding ramp plan starts tROAS above the actual goal and reduces it incrementally (e.g., week 1 higher, week 2 lower, settling at target by week 4)"
},
{
"name": "30-50 conversion threshold",
"max_score": 8,
"description": "The document states that Target ROAS / Smart Bidding should only be enabled after accumulating at least 30–50 conversions in the prior 30 days"
},
{
"name": "Enhanced Conversions before Smart Bidding",
"max_score": 8,
"description": "Enhanced Conversions setup is listed as a prerequisite or pre-launch step that must be completed before activating Smart Bidding / tROAS"
},
{
"name": "Conversion Value Rules for new customers",
"max_score": 8,
"description": "The architecture includes Conversion Value Rules (or equivalent) that boost the reported value of new customer conversions by 20–50% to prioritize new customer acquisition"
},
{
"name": "High-margin SKU segmentation",
"max_score": 6,
"description": "Standard Shopping ad groups or PMax asset groups are segmented to give higher bids or higher tROAS to high-margin products versus low-margin ones"
}
]
}
Design Google Ads Campaign Architecture for a Growing Ecommerce Brand
Problem/Feature Description
NovaPet, a direct-to-consumer pet supplies brand, is rebuilding their Google Ads account from scratch after a poor experience with a single catch-all Performance Max campaign that burned through their entire budget on branded searches. They have an established product catalog with a clear margin structure: premium subscription food products (high margin, ~55%) and accessories like toys and bowls (lower margin, ~25%). They launched six weeks ago and have accumulated 42 purchases total in their Google Ads account. Their brand name is "NovaPet."
The head of growth wants a comprehensive campaign architecture document that details exactly how to structure their campaigns, what bidding strategy to use at launch, how to manage the transition to automated bidding as data accumulates, and how to prevent the brand spend cannibalization problem they experienced before. They also want to understand how to configure audience targeting in Performance Max without limiting their reach, and what steps they need to take to make Smart Bidding reliable over time.
Output Specification
campaign-architecture.md— a detailed document describing the full campaign structure, including:- All campaigns with their types, priorities, and initial bidding strategies
- Asset group organization within PMax
- Keyword strategy and match types for Search campaigns
- Negative keyword strategy across campaigns
- A week-by-week Smart Bidding ramp plan for the first 4 weeks
- Audience configuration guidance for Performance Max
- A prioritized checklist of pre-launch steps to ensure Smart Bidding performs well
campaign-structure.json— a machine-readable representation of the campaign hierarchy (campaigns → ad groups/asset groups → bidding settings)
{
"context": "Tests whether the agent correctly implements Google Ads purchase conversion tracking including deduplication via transaction_id, Enhanced Conversions with user_data set before the conversion fires, new customer flagging, email normalization, and server-side sGTM tracking with the correct endpoint and payload.",
"type": "weighted_checklist",
"checklist": [
{
"name": "transaction_id present",
"max_score": 10,
"description": "The gtag conversion event includes a transaction_id field set to the order ID (prevents duplicate conversions from page refreshes)"
},
{
"name": "new_customer flag",
"max_score": 8,
"description": "The gtag purchase conversion event includes a new_customer field set to a boolean or value derived from whether the order is the customer's first"
},
{
"name": "user_data set before conversion",
"max_score": 12,
"description": "gtag('set', 'user_data', {...}) is called BEFORE the gtag('event', 'conversion', ...) call on the confirmation page (not after, not in a separate async flow)"
},
{
"name": "user_data email field",
"max_score": 8,
"description": "The user_data object passed to gtag includes an email field"
},
{
"name": "user_data phone and address",
"max_score": 8,
"description": "The user_data object includes both phone and address fields (with address containing at minimum first_name, last_name, and postal_code or similar subfields)"
},
{
"name": "Email normalized lowercase",
"max_score": 10,
"description": "The email value passed into user_data is converted to lowercase and/or trimmed (e.g., using .toLowerCase().trim()) before being sent"
},
{
"name": "sGTM /data endpoint",
"max_score": 10,
"description": "The server-side tracking function sends a POST request to a URL ending in '/data' on the sGTM container URL (e.g., `${SGTM_CONTAINER_URL}/data`)"
},
{
"name": "sGTM purchase payload",
"max_score": 8,
"description": "The sGTM POST payload includes transaction_id, value, currency, and an items array with item-level details"
},
{
"name": "sGTM Enhanced Conversions fields",
"max_score": 8,
"description": "The sGTM payload includes email and phone fields alongside the standard purchase event data"
},
{
"name": "gtag loaded on page",
"max_score": 5,
"description": "The order confirmation HTML includes the Google Tag script tag loading gtag.js in the <head>"
},
{
"name": "Correct conversion label",
"max_score": 5,
"description": "The send_to parameter in the conversion event uses the format 'AW-CONVERSION_ID/CONVERSION_LABEL' with the account and label values provided in the task"
},
{
"name": "sGTM event_name field",
"max_score": 8,
"description": "The sGTM POST body includes an event_name field (set to 'purchase' or equivalent)"
}
]
}
Implement Google Ads Conversion Tracking for Order Confirmation
Problem/Feature Description
Bloom & Basket, a specialty gift basket ecommerce shop, recently launched Google Ads campaigns but is seeing significant discrepancies between their reported conversions and their actual order count. The marketing team suspects duplicate conversions are inflating their numbers, and their Smart Bidding performance is inconsistent because the algorithm isn't receiving reliable purchase signals. They also want to understand why their conversion match rate with Google is very low.
Your task is to write the order confirmation page conversion tracking code for their storefront. The implementation must correctly fire Google Ads purchase conversions, implement Enhanced Conversions for improved signal recovery, and additionally implement server-side tracking via their existing sGTM container for resilience against browser restrictions. The implementation should work for both new and returning customers.
The store uses vanilla JavaScript on a Node.js/Express backend. Their Google Ads account ID is AW-987654321, their purchase conversion label is abc123XYZ, and their sGTM container is available at the URL stored in the environment variable SGTM_CONTAINER_URL.
Output Specification
order-confirmation.html— the complete order confirmation page with all Google tag scripts included in the<head>and the conversion tracking code in the<body>track-purchase.js— a server-side Node.js module that exports atrackGooglePurchase(order)function that sends the purchase event to the sGTM container- A
notes.mdfile explaining any key implementation decisions, including how duplicate conversions are prevented and how Enhanced Conversions improve match rates
Input Files
The following files are provided as inputs. Extract them before beginning.
=============== FILE: inputs/order-example.json =============== { "id": "ORD-20240315-8821", "subtotal": 84.50, "currencyCode": "USD", "isFirstOrder": true, "customerEmail": "Jane.Smith@Example.COM", "customerPhone": "+14155550192", "customerFirstName": "Jane", "customerLastName": "Smith", "shippingAddress": { "line1": "123 Main Street", "city": "San Francisco", "state": "CA", "zip": "94102", "countryCode": "US" }, "lineItems": [ { "sku": "GBK-LUXURY-001", "name": "Luxury Spa Gift Basket", "price": 59.99, "quantity": 1 }, { "sku": "ADD-RIBBON-001", "name": "Personalized Ribbon", "price": 4.99, "quantity": 1 } ] }
{
"context": "Tests whether the agent generates a valid Google Merchant Center XML RSS product feed with correct field formatting, title/description handling, price format, custom labels for segmentation, and proper availability/variant mapping.",
"type": "weighted_checklist",
"checklist": [
{
"name": "XML RSS format",
"max_score": 10,
"description": "The output feed file is valid XML in RSS feed format (contains <rss>, <channel>, and <item> elements)"
},
{
"name": "Title truncation",
"max_score": 8,
"description": "Product variant titles are truncated to a maximum of 150 characters (no g:title value exceeds 150 characters)"
},
{
"name": "Description HTML stripped",
"max_score": 8,
"description": "The g:description fields contain no HTML tags (all <p>, <strong>, <em> and other tags are stripped from descriptions)"
},
{
"name": "Description truncation",
"max_score": 5,
"description": "The g:description fields are truncated to a maximum of 5000 characters"
},
{
"name": "Price format",
"max_score": 10,
"description": "All g:price and g:sale_price values follow the format '<decimal>.toFixed(2) USD' (e.g., '129.99 USD', '59.95 USD')"
},
{
"name": "custom_label_0 margin",
"max_score": 12,
"description": "g:custom_label_0 is set to 'high-margin' or 'low-margin' based on product margin (products with margin >= 0.4 get 'high-margin', others get 'low-margin')"
},
{
"name": "custom_label_1 arrival",
"max_score": 12,
"description": "g:custom_label_1 is set to 'new-arrival' for new arrival products and 'core' for non-new-arrival products"
},
{
"name": "Availability mapping",
"max_score": 8,
"description": "g:availability is set to 'in stock' when stockQuantity > 0 and 'out of stock' when stockQuantity is 0"
},
{
"name": "GTIN and MPN included",
"max_score": 8,
"description": "g:gtin and g:mpn are included in item entries when available in the source data (not hardcoded empty or omitted entirely)"
},
{
"name": "Variant-level entries",
"max_score": 8,
"description": "Each product variant is represented as a separate feed item (e.g., prod-001 produces two entries: TRP-BLK-9 and TRP-BLU-10)"
},
{
"name": "Image fallback",
"max_score": 7,
"description": "For variants with no variant-level images, the parent product's image URL is used as the g:image_link fallback"
},
{
"name": "Brand in title",
"max_score": 4,
"description": "Product titles include meaningful identifiers such as color and/or size from the variant title (e.g., 'Trail Runner Pro - Black / Size 9')"
}
]
}
Build a Google Merchant Center Product Feed Generator
Problem/Feature Description
A mid-sized outdoor gear retailer, Summit Supply Co., is launching Google Shopping ads for the first time. Their catalog of 200+ products is managed in an internal database, and the marketing team needs a script that exports the catalog into a format that Google Merchant Center will accept. Each product has multiple variants (sizes and colors), varying profit margins, and some are new arrivals from this season's collection.
The engineering team has given you access to a mock product dataset (provided below). Your job is to write a TypeScript or JavaScript module that transforms this raw product data into a valid Google Merchant Center product feed. The resulting feed file must be uploadable to Google Merchant Center and structured so that the marketing team can later use it to drive campaign segmentation in Google Ads.
Output Specification
- A
feed-generator.ts(orfeed-generator.js) script that takes the mock product data and writes a feed file to disk - A generated feed output file named
shopping-feed.xml - The feed must include all required Google Shopping feed attributes for each product variant
Input Files
The following files are provided as inputs. Extract them before beginning.
=============== FILE: inputs/products.json =============== [ { "id": "prod-001", "name": "Trail Runner Pro", "slug": "trail-runner-pro", "description": "<p>The <strong>Trail Runner Pro</strong> is our most popular hiking shoe. Designed for serious trail runners who demand grip, durability, and comfort over long distances. Features a Vibram outsole and breathable mesh upper.</p>", "brandName": "Summit Supply Co.", "gpcCategory": "Apparel & Accessories > Shoes", "categories": [{"name": "Footwear"}, {"name": "Trail Running"}], "isNewArrival": false, "images": [{"url": "https://example.com/images/trail-runner-hero.jpg"}], "variants": [ { "sku": "TRP-BLK-9", "title": "Black / Size 9", "price": 129.99, "compareAtPrice": null, "stockQuantity": 45, "gtin": "012345678901", "mpn": "TRP-001-BK", "images": [{"url": "https://example.com/images/trail-runner-black.jpg"}] }, { "sku": "TRP-BLU-10", "title": "Blue / Size 10", "price": 129.99, "compareAtPrice": null, "stockQuantity": 0, "gtin": "012345678902", "mpn": "TRP-001-BL", "images": [] } ], "margin": 0.45 }, { "id": "prod-002", "name": "Alpine Base Layer", "slug": "alpine-base-layer", "description": "<p>Stay warm and dry with the Alpine Base Layer. <em>Merino wool blend</em> with 4-way stretch. Perfect for layering in cold conditions.</p><p>Available in multiple colors and sizes.</p>", "brandName": "Summit Supply Co.", "gpcCategory": "Apparel & Accessories > Clothing", "categories": [{"name": "Clothing"}, {"name": "Base Layers"}], "isNewArrival": true, "images": [{"url": "https://example.com/images/base-layer-hero.jpg"}], "variants": [ { "sku": "ABL-GRY-S", "title": "Gray / Small", "price": 59.95, "compareAtPrice": 79.95, "stockQuantity": 120, "gtin": null, "mpn": "ABL-GRY-S", "images": [{"url": "https://example.com/images/base-layer-gray.jpg"}] }, { "sku": "ABL-NVY-M", "title": "Navy / Medium", "price": 59.95, "compareAtPrice": null, "stockQuantity": 88, "gtin": "012345678910", "mpn": "ABL-NVY-M", "images": [] } ], "margin": 0.32 }, { "id": "prod-003", "name": "Summit Trekking Poles", "slug": "summit-trekking-poles", "description": "Lightweight adjustable trekking poles made from aircraft-grade aluminum. Collapsible to 60cm for easy pack storage. Anti-shock system reduces impact on joints during descents.", "brandName": "Summit Supply Co.", "gpcCategory": "Sporting Goods > Outdoor Recreation", "categories": [{"name": "Gear"}, {"name": "Hiking Accessories"}], "isNewArrival": true, "images": [{"url": "https://example.com/images/poles-hero.jpg"}], "variants": [ { "sku": "STP-ONE-SZ", "title": "Silver / One Size", "price": 89.00, "compareAtPrice": null, "stockQuantity": 34, "gtin": "012345678920", "mpn": "STP-001", "images": [{"url": "https://example.com/images/poles-silver.jpg"}] } ], "margin": 0.55 } ]
{
"name": "finsi/google-ads-ecommerce",
"version": "0.1.0",
"summary": "Build and optimize Google Ads campaigns for ecommerce with Performance Max, Shopping feeds, conversion tracking, and Smart Bidding strategies for ROAS",
"skills": {
"google-ads-ecommerce": {
"path": "SKILL.md"
}
}
}