Weekly SEO refresh for stale Shopify product descriptions

Every Sunday, find stale or non-converting Shopify products, rewrite their descriptions for SEO, and log every change in Notion for review.

Agentic Task
ShopifyNotionMarketingOperationsContent GenerationAI Reports

Build me an agent workflow that runs once a week on a cron trigger (Sunday at 6pm America/New_York) and refreshes the descriptions of stale or underperforming Shopify products with SEO-friendly rewrites, logging every change to a Notion audit database.

Selecting which products to refresh. Call Shopify List Products to enumerate active products, paginating until done. Call Shopify List Orders filtered to the last 30 days (any financial status) and build a set of product IDs that appear in line items. A product is a candidate for refresh if it meets either condition: (a) status = active AND updated_at is older than 120 days, or (b) status = active AND its product ID does not appear in any order line item from the last 30 days. From the candidate pool, pick at most 20 products per run. Prefer products that hit BOTH conditions, then the oldest updated_at first, so the catalog never gets rewritten all at once.

Drafting the new copy. For each selected product, read the existing title, body_html, vendor, product_type, and tags. Then draft a new SEO-friendly description that: opens with an improved meta-style first sentence (one tight line with the primary keyword); is 80 to 150 words total; uses 3 to 5 scannable bullets covering benefits, materials or specs, and use cases; weaves the product title and one or two relevant keywords from the title/tags in naturally without keyword stuffing; matches a clean, friendly DTC voice. Keep brand-specific language and any compliance phrasing from the original (warranty, sourcing claims, allergen info) intact.

Writing it back. For each selected product, call Shopify Update Product to set body_html to the new description. Do not change title, price, variants, images, or status.

Auditing in Notion. For every product that was updated, call Notion Create a Page as a child of the audit database (I will provide the database ID at setup) with these properties: Product ID, Product Handle, Product Title, Reason Flagged (one of: stale, no_recent_sales, both), Old Description (truncated to fit Notion's rich text limit if needed), New Description, and Run Timestamp. Use the page body to store the full old and new descriptions side by side as two headings with paragraph content, in case the rich text properties get truncated.

Guardrails. Cap the run at 20 products. Skip any product whose tags include 'do-not-rewrite' or 'hero'. If Shopify returns a rate limit (429), back off and retry. If the Notion audit page fails to create for a product, do NOT update that product in Shopify on retry; the audit log must exist for every rewrite. Log a short summary at the end: how many products were considered, how many were rewritten, and which were skipped and why.

Inputs I will set at install time: the Notion audit database ID, the weekly cap (default 20), the staleness threshold in days (default 120), the no-sales window in days (default 30), and an optional list of vendor names or tags to exclude.

Additional information

What does this prompt do?
  • Picks up to 20 products each week that look stale (not updated in a while) or that haven't sold recently, so your catalog never gets rewritten all at once.
  • Drafts a fresh, SEO-friendly description for each product with a clear value prop, scannable bullets, and your target keywords woven in naturally.
  • Publishes the new copy back to your Shopify store automatically, so refreshed listings go live without anyone copy-pasting.
  • Logs every rewrite to a Notion audit database with the old text, the new text, and the reason it was flagged, so your marketing owner can review or revert.
What do I need to use this?
  • A Shopify store and admin access to read and update products and orders.
  • A Notion workspace with an audit database shared with your General Input connection.
  • A rough idea of which products are core (so you can exclude them) and what a 'stale' product looks like for your catalog.
How can I customize it?
  • Change the day and time it runs, or raise or lower the weekly cap on how many products get rewritten.
  • Tune the 'stale' definition: how many days since the last update, how many days since the last sale, which product status to include.
  • Set the voice, length, and target keywords for the new descriptions, or scope it to specific vendors, tags, or collections.

Frequently asked questions

Will this rewrite my entire catalog at once?
No. The workflow caps each run at a small batch (20 products by default) and only picks products that look stale or non-converting. You can lower the cap or narrow the filters so it touches even fewer.
How do I review or undo a rewrite?
Every rewrite is logged to a Notion database row with the old description, the new description, the product handle, and the reason it was flagged. If you want to revert, you can copy the old text straight from the audit row back into Shopify.
Can I exclude specific products or collections?
Yes. You can tell the agent to skip products in certain collections, with certain tags, or from specific vendors. A common setup is to exclude your hero products and only let it touch the long tail.
What if a product is already selling well?
The selection rules look for products that look stale or haven't sold recently, so strong sellers in the last 30 days are skipped by default. You can also exclude them by tag or collection if you want to be extra safe.
Does this also update SEO meta titles and tags?
Out of the box it rewrites the main product description and an improved first sentence. You can extend it to also rewrite the SEO meta title, alt text, or tags by asking the agent to update those fields too.

Stop letting stale product copy hide your best inventory.

Connect Shopify and Notion once, and Geni rewrites the right product descriptions every Sunday with a full audit trail.