QuickAdsGUIDES
Agentic commerceLLM SEORank in ChatGPTSell on ChatGPTShopping agentsACP and UCPShopifyProduct feedsAI visibilityCatalog video
Book a call
Guide

Catalog video for AI search: making product video machine-readable

Agents cannot watch your product video. They read what is attached to it. How to tag catalog video with VideoObject schema, transcripts and per-SKU links.

Start freeBook a call
QuickAds Editorial Team
 · Reviewed by
Nitin Mahajan, Founder & CEO
 · Last updated
September 17, 2026

The short answer

Catalog video for AI search means product video that a shopping agent can interpret without watching it. The agent reads attached metadata: VideoObject schema with contentUrl, thumbnailUrl, uploadDate and duration, a transcript, captions, and an explicit link between the video and the specific SKU it shows. Untagged video is invisible to agents.

Key takeaways

  • Agents read metadata, not footage. Even where a model can process frames, the retrieval step that decides whether your video is considered at all runs on text and structured data. No markup means no candidacy.
  • VideoObject is the contract. name, description, thumbnailUrl, uploadDate, duration, contentUrl and a transcript are the fields that turn a file into an entity a machine can describe.
  • Association is the part everyone skips. A video is useful to an agent only when it is tied to a specific SKU, not to a collection page or a brand channel.
  • A video that ranks and a video that converts are usually different cuts. One needs completeness and literal language, the other needs a hook and a demonstration. The same shoot can produce both.
  • Per-SKU video at catalog scale is an ops problem. Naming, versioning, metadata keyed on SKU, and QA that the right file is attached to the right variant decide whether this survives past 50 products.
  • QuickAds produces catalog video with the tagging attached. Per-SKU video with structured metadata and schema, at 100+ creatives a month with a 5-7 day turnaround.

Video is the fastest-growing asset in most product catalogs and the least machine-readable one. A shopping agent picking between three moisturizers is not watching your 30-second demo. It is reading whatever text and structured data sit around that file, and for most brands that is a filename and an autoplay embed.

This page covers what to attach to product video so agents and AI search can use it, how to connect a video to one SKU rather than a whole category, and why doing that across a catalog is an operations problem long before it is a creative one.

The measured gap

Classic search and AI Mode are different shelves.

Productrise compared 2M+ listings across 100k+ SERPs in the US and UK, 9–31 August 2026, running the same queries on both surfaces on the same day.

Products ranking in both
1.28%
Matched products with a different main seller
49.6%
AI Mode price premium on matched products
21.6%

Median, classic search

$100

Median, AI Mode

$149

Source: Productrise, August 2026. Google surfaces, not a forecast for any individual catalog.

Three surfaces

Ranking in ChatGPT means three different jobs.

Each is fed by a different system. Winning one does nothing for the other two, and they need different owners.

01

Written answers

Fed by live retrieval plus training memory. Won with crawler access, quotable pages and third-party coverage.

Content and SEO
02

Product results

Fed by your merchant feed and the Agentic Commerce Protocol. Won on feed quality and checkout integration.

Ecommerce and ops
03

Sponsored placement

Bought in OpenAI's Ads Manager, or through Amazon DSP. Budget and targeting rather than content.

Paid media

Two standards

Same four asks, different front doors.

Strip out the vocabulary and both protocols want the same things from a merchant. That overlap is why sequencing beats choosing.

ACP

OpenAI and Stripe · reaches ChatGPT

UCP

Google · reaches Google surfaces

  • A catalog a machine can parse, one row per sellable variant
  • Price and availability that are true right now
  • A programmatic way to confirm a cart, priced by you
  • An order lifecycle you can report back on

You stay merchant of record under both. The shared work takes a quarter; the protocol-specific work takes weeks.

The division of labour

Shopify hands you the structure. You fill it.

Ships with the platform
  • Structured product record
  • A real variant model
  • Standard product taxonomy
  • Category attributes
  • Product JSON-LD in default themes
  • Server-rendered Liquid templates
Still on the merchant
  • Category, often unset or too shallow
  • Variant option names that map
  • Barcode and identifiers
  • Metafield definitions
  • Literal description style
  • robots.txt.liquid decisions

The contract

What a machine-readable video carries.

VideoObject served in the page HTML rather than injected by JavaScript. These are the properties worth getting right.

namedescriptioncontentUrlembedUrlthumbnailUrluploadDatedurationtranscriptcaptionhasPartpublisher

Plus the association: point VideoObject.about at the product entity, or Product.subjectOf at the video, with matching @id values.

In this guide

Why agents cannot see your product video
What a machine-readable product video looks like, at a glance
Connecting the video to the product record
A video that ranks and a video that converts are different cuts
Per-SKU video at catalog scale is an operations problem
The diagnostic: what your video currently tells an agent
Easy fixes you can ship in a week
The harder work, and where QuickAds fits

Why agents cannot see your product video

An agent evaluating your product does not watch the video. It reads what is attached to the video, and for most catalogs nothing is attached beyond a filename and a player embed.

This is worth stating precisely, because it is easy to overstate. Some models can process video frames when given a file directly. That is not what happens in shopping. The step that matters is retrieval: deciding which products and which assets are even candidates for an answer, and that step runs on text, structured data and feeds.

So the practical situation is that your video exists, it is on the page, and it contributes nothing to whether an agent can describe your product accurately. The agent sees a div with a player in it, or a script tag, and moves on to your bullet points.

The gap gets wider as assistant surfaces build their own shelves. Productrise, studying 2M+ listings across 100k+ SERPs in the US and UK during August 2026, found only 1.28% product overlap between classic Google search and AI Mode, with the main seller differing on 49.6% of matched products. The surfaces select differently, from different inputs.

Three failure modes cause almost all of it.

  • Client-side injection. The player and any markup are added by JavaScript after load. A fetch of the raw HTML returns no video reference at all.
  • No association. The video is on the site but nothing states which product it shows, so it cannot be attached to a SKU in any index.
  • No text. No transcript, no captions file, no description beyond the product title, so the only searchable content is what somebody typed into a title field two years ago.

Fixing all three is mechanical. That is the good news in this page: the work is dull rather than difficult, and almost nobody has done it.

What a machine-readable product video looks like, at a glance

A machine-readable product video is a VideoObject with a complete set of properties, served in the page HTML rather than injected later. Here is the set worth getting right.

  • name and description. Literal, not campaign language. How to fit the 6-pack organizer in a standard kitchen drawer beats Meet the new era of storage.
  • contentUrl. A direct link to the playable file, usually an MP4. This is the single most common omission, and a contentUrl pointing at the product page instead of the file is the second most common.
  • embedUrl. The player URL, when you serve through a player rather than a bare file. Provide both where both exist.
  • thumbnailUrl. A crawlable image URL, not a signed URL that expires and not a data URI.
  • uploadDate. ISO 8601 with a timezone offset. Missing or malformed dates are a routine reason a video fails validation.
  • duration. ISO 8601 duration format, so 1 minute 32 seconds is PT1M32S, not 1:32.
  • transcript. The spoken content as text. Also publish it visibly on the page, because visible text is indexed by systems that never parse your JSON-LD.
  • caption. A WebVTT file referenced properly, which also serves accessibility and silent autoplay viewing.
  • hasPart. Clip entries with startOffset and endOffset for videos covering several things, so an agent can point at the sizing segment rather than the whole file.
  • publisher. Your organization entity, linked by @id to the same organization you use elsewhere on the site.

Two constraints that break otherwise correct markup. First, the file at contentUrl must be fetchable: a CDN path disallowed in robots.txt makes the whole entity unverifiable. Second, the markup must be in the server response, because a crawler that does not execute your player's JavaScript sees an empty container.

Google's own thumbnail floor is low, at 60 by 30 pixels, with larger explicitly preferred, and the file has to sit at a stable URL Googlebot can reach. Video sitemaps are one way to supply that metadata rather than a required companion to VideoObject markup. If you supply both, use the same thumbnail URL in each, because conflicting sources are worse than one.

Connecting the video to the product record

Markup makes your video an entity. Association makes it a product asset. Without the second step an agent knows a video exists and cannot tell you it is about the navy 6-pack in medium.

The linkage runs through schema.org relationships, and the direction that works is worth being precise about. Product does not carry a native video property, so you connect the two by pointing VideoObject.about at the product entity, or Product.subjectOf at the video entity, with matching @id values so the graph actually joins.

At SKU level that means the product entity you point at is the variant, carrying its own sku, gtin and offers, not the parent product page. A video attached to a parent with fourteen variants tells an agent nothing about which one it shows.

What good association looks like

  • Every video has exactly one primary product entity, identified by the same @id used in your Product markup.
  • Variant-specific video points at the variant entity. Shared video, such as a care or assembly clip, points at the parent and says so in its description.
  • The video appears on the PDP it describes, not only on a collection or landing page.
  • The transcript mentions the literal attributes the SKU is sold on: size, pack count, material, fit, compatibility.

Feeds are the other half, and they are less settled. Feed specifications carry image fields reliably and video support varies by surface, so check before assuming your feed can carry a video reference at all.

Google Merchant Center does carry a product-level video field, video_link. It is optional, takes up to ten URLs per product, and expects clips of 6 to 240 seconds at 720p or better. OpenAI's product feed specification documents a media object with a type and a URL, and image is the only media type it spells out, so do not assume a video reference will travel through it.

Which agents actually read VideoObject markup is not something any of them publishes. Test it surface by surface with your own SKUs rather than assuming, and treat the markup as the cost of being readable rather than as a guaranteed placement.

The reward for doing this is not only video visibility. Transcript text that names real attributes strengthens the product record itself, which is the same asset that decides whether you are picked in ChatGPT shopping results and in agentic commerce generally.

A video that ranks and a video that converts are different cuts

These two jobs pull in opposite directions, and trying to serve both with one file is why most catalog video does neither well.

A video built to be found rewards completeness. It states the product name early and plainly, covers the attributes people search on, runs long enough to answer the obvious questions, and carries a transcript dense with literal nouns. Its job is to be describable.

A video built to sell rewards compression. It opens on the problem inside the first two seconds, demonstrates rather than explains, works with the sound off, and ends before the viewer's patience does. Its job is to hold attention in a feed.

The economics only work because both come from the same shoot. One production session yields the long explainer, the short paid cut, the vertical version and the silent-readable variant. Shooting them separately is what makes catalog video feel unaffordable.

How to tell which one you are looking at

  • Findable video. Literal title, transcript full of attribute words, chapters marked with hasPart, stable URL, complete VideoObject.
  • Selling video. Hook before any branding, one clear demonstration, burned-in captions, cut to the placement's aspect ratio, tested against alternatives.
  • Neither. A 45-second brand film with music, no speech, no transcript, no schema, attached to a category page. Common, and it does nothing for either goal.

We do not claim a conversion lift from adding video, and you should be skeptical of anyone who quotes you one without your data. What is true and checkable is narrower: untagged video cannot be interpreted by an agent, and tagged video can. Everything past that is a test you run with your own catalog.

For the paid side of that split, our approach to video ads covers format, hook structure and iteration volume.

Per-SKU video at catalog scale is an operations problem

One video with perfect schema takes an afternoon. Four hundred videos with correct per-SKU association is a pipeline, and that is where brands stall.

The arithmetic is unforgiving. Three hundred SKUs, two aspect ratios and two lengths is twelve hundred files. Every one needs a name that maps to a SKU, a transcript, a caption file, a thumbnail and a schema block, and every one has to be checked against the right variant.

Then the catalog changes. A pack size gets updated, a colorway is discontinued, packaging is redesigned, and now some subset of those files shows a product you no longer sell. Stale video attached to a live SKU is worse than no video, because you are now describing something inaccurately to a system that ranks on accuracy.

What the pipeline has to handle

  • SKU-keyed naming. Filenames and asset IDs derived from the SKU, so association is a lookup rather than a judgment call.
  • Metadata generated with the asset. Transcript, captions, duration and thumbnail produced in the same step as the render, not chased afterwards.
  • Schema emitted by the template. Your PDP template writes VideoObject from the product record, so a new SKU inherits correct markup automatically.
  • Change triggers. A variant edit flags its video for review, so discontinued and redesigned products do not keep their old footage.
  • Association QA. A sampled check that the file playing on a PDP is the file the markup claims, because template bugs silently attach one video to a whole collection.

Most in-house creative teams can make the video. Far fewer can make twelve hundred of them, keep the metadata correct and keep it correct through a merchandising cycle. That is the gap this work actually lives in.

The diagnostic: what your video currently tells an agent

Run this on your own catalog before deciding whether any of this applies to you. It takes an hour and the results are usually blunt.

  1. Pick five PDPs with video: two bestsellers, two with multiple variants, one product you changed or repackaged in the last year.
  2. Fetch each page as a plain HTTP request with JavaScript disabled. Search the raw HTML for VideoObject. If it is not there, agents and crawlers that do not run your player script see no video at all.
  3. For each VideoObject you do find, check contentUrl, thumbnailUrl, uploadDate and duration are present and well-formed. Confirm duration uses ISO 8601, so PT1M32S rather than 1:32.
  4. Open the contentUrl directly in a fresh browser session. If it 404s, redirects, requires a token or is disallowed in robots.txt, the entity cannot be verified.
  5. Check the association: does anything in the markup point at the specific product, and at the variant rather than the parent, using matching @id values.
  6. Search the page for the transcript. If there is no visible text version and no transcript property, the spoken content is invisible to every text-based system.
  7. Ask ChatGPT, Gemini and Perplexity what your product video shows, giving only the product page URL. Note whether the answer reflects the video or only the page copy.
  8. Count, across your whole catalog, how many SKUs have any video at all and how many of those have schema. The second number is usually a small fraction of the first.

Write down two figures at the end: percentage of SKUs with video, and percentage of those videos with complete, server-rendered markup pointing at a specific product. Those two numbers scope the entire project and tell you whether to start with tagging what exists or with producing what does not.

If the first number is low, the bottleneck is production capacity. If the second is low, the bottleneck is tagging and templates. They are different fixes with different owners.

Easy fixes you can ship in a week

Four changes are worth doing immediately, before any new video is produced. Each one is template work or asset hygiene rather than a project.

  • Emit VideoObject from your PDP template. Change: generate the markup server-side from the product record so every product with a video gets consistent, complete schema. Good looks like: the raw HTML of any video PDP contains VideoObject with name, description, contentUrl, thumbnailUrl, uploadDate and duration, with no manual step.
  • Publish transcripts as visible page text. Change: add the spoken content under or beside the player, and mirror it in the transcript property. Good looks like: every attribute a shopper might search on appears in readable text, and the page still makes sense with the video removed.
  • Attach captions properly. Change: produce a WebVTT file per video and reference it in the player and in the markup. Good looks like: captions load in the player, the file is fetchable on its own URL, and the language is declared.
  • Fix contentUrl and robots access. Change: point contentUrl at the actual media file, remove expiring tokens from that path, and confirm your video CDN directory is not disallowed in robots.txt. Good looks like: the URL plays in a clean browser session with no cookies.
  • Repoint videos from parents to variants. Change: where a video clearly shows one variant, associate it with that variant entity rather than the parent product. Good looks like: no video claiming to be about fourteen SKUs at once.

None of these need new footage. They make the video you already paid for legible, which is the cheapest available improvement in most catalogs.

One sequencing note. Do this before commissioning more video, because a template that emits correct markup applies to every future asset automatically, while retrofitting schema onto a library you already shipped is manual work you pay for twice. The same logic applies to feeds, covered in product feed optimization.

The harder work, and where QuickAds fits

The slow part is not tagging. It is producing enough video for a real catalog and keeping the metadata true as the catalog moves.

What takes longer

Coverage is the first hurdle. Going from video on your top 20 products to video on every SKU that sells is a production volume problem, and in-house teams built for campaign work are not staffed for it.

Freshness is the second. Every pack size change, colorway retirement and packaging redesign invalidates footage. Without a change trigger tying variant edits to asset review, accuracy decays quietly over a year.

Consistency is the third. Video produced by five different suppliers over three years has five different metadata conventions, which makes automated association impossible and forces someone to check files by hand.

The fourth is variant complexity. Agents are still weak on compound variants, size plus pack count plus style together, so video and transcripts that state those attributes explicitly do useful disambiguation work the product title alone cannot.

Where QuickAds fits

This is the offer we are most specific about. We produce catalog video per SKU with the structured metadata and schema attached: transcript, captions, duration, thumbnail, contentUrl and the association back to the correct product entity, delivered as assets and markup together rather than files you then have to tag.

The throughput is 100+ creatives a month at a 5-7 day turnaround, with creative intelligence trained on 32M+ ads informing what gets made. Software starts at $299/mo and managed engagements start at $5,000/mo.

We cover the whole chain: intelligence, strategy, production and campaign management, plus the product data the assets attach to. Analytics-only tools tell you which video performed and produce nothing. Premium production shops deliver the file and leave the tagging, the association and the catalog to you.

If video volume is the constraint rather than tagging, start with creative as a service.

Frequently asked questions

Can AI shopping agents actually watch product videos?

Not in the step that matters. Some models can process video frames when handed a file directly, but the retrieval stage that decides which products and assets are candidates for an answer runs on text, structured data and feeds. In practice an agent reads your VideoObject markup, transcript and captions. A video with none of those contributes nothing.

What schema markup do I need for product video?

VideoObject, served in the page HTML rather than injected by JavaScript, with name, description, contentUrl, thumbnailUrl, uploadDate and duration at minimum. Add transcript, caption and hasPart clips where they apply. Then connect it to the product by pointing VideoObject.about at the product entity, or Product.subjectOf at the video, using matching @id values so the two records join.

Do I need a separate video for every SKU?

Not for every SKU, but variant-specific claims need variant-specific video. If the difference between two SKUs is visible, such as color, pack count or size, a shared video misrepresents at least one of them. A practical split is variant-level video for visually distinct options, and shared parent-level video for care, assembly or sizing content that genuinely applies to all.

Where should the video transcript live?

In two places. Put it in the transcript property of your VideoObject markup so structured data consumers can read it, and publish it as visible text on the page so systems that never parse JSON-LD can index it too. Write it to include the literal attributes the product is sold on: size, material, pack count, fit and compatibility.

Will adding video improve my visibility in AI search?

Tagged video gives an agent information it did not previously have about your product, and untagged video gives it none. That is the defensible claim. Whether it changes your placement depends on the surface, your category and your competitors, so treat it as a test on your own catalog rather than a guaranteed gain, and measure per-surface rather than in aggregate.

Make these in QuickAds

Start free
{"@context":"https://schema.org","@graph":[{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.quickads.ai/"},{"@type":"ListItem","position":2,"name":"Agentic Commerce","item":"https://www.quickads.ai/topic-pages/agentic-commerce"},{"@type":"ListItem","position":3,"name":"Catalog Video for AI Search: Make Product Video Readable","item":"https://www.quickads.ai/topic-pages/catalog-video-for-ai-search"}]},{"@type":"Organization","@id":"https://www.quickads.ai/#organization","name":"QuickAds","url":"https://www.quickads.ai/","description":"QuickAds is a performance creative platform covering creative intelligence, creative strategy, creative production and campaign management for consumer brands."},{"@type":"WebPage","@id":"https://www.quickads.ai/topic-pages/catalog-video-for-ai-search#webpage","url":"https://www.quickads.ai/topic-pages/catalog-video-for-ai-search","name":"Catalog Video for AI Search: Make Product Video Readable","description":"Agents cannot watch your product video. They read what is attached to it. How to tag catalog video with VideoObject schema, transcripts and per-SKU links.","dateModified":"2026-09-17","isPartOf":{"@id":"https://www.quickads.ai/#organization"}},{"@type":"Article","headline":"Catalog video for AI search: making product video machine-readable","description":"Agents cannot watch your product video. They read what is attached to it. How to tag catalog video with VideoObject schema, transcripts and per-SKU links.","author":{"@type":"Organization","name":"QuickAds Editorial Team"},"reviewedBy":{"@type":"Person","name":"Nitin Mahajan","jobTitle":"Founder & CEO"},"publisher":{"@id":"https://www.quickads.ai/#organization"},"datePublished":"2026-09-17","dateModified":"2026-09-17","isPartOf":{"@id":"https://www.quickads.ai/topic-pages/catalog-video-for-ai-search#webpage"},"mainEntityOfPage":{"@id":"https://www.quickads.ai/topic-pages/catalog-video-for-ai-search#webpage"}},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Can AI shopping agents actually watch product videos?","acceptedAnswer":{"@type":"Answer","text":"Not in the step that matters. Some models can process video frames when handed a file directly, but the retrieval stage that decides which products and assets are candidates for an answer runs on text, structured data and feeds. In practice an agent reads your VideoObject markup, transcript and captions. A video with none of those contributes nothing."}},{"@type":"Question","name":"What schema markup do I need for product video?","acceptedAnswer":{"@type":"Answer","text":"VideoObject, served in the page HTML rather than injected by JavaScript, with name, description, contentUrl, thumbnailUrl, uploadDate and duration at minimum. Add transcript, caption and hasPart clips where they apply. Then connect it to the product by pointing VideoObject.about at the product entity, or Product.subjectOf at the video, using matching @id values so the two records join."}},{"@type":"Question","name":"Do I need a separate video for every SKU?","acceptedAnswer":{"@type":"Answer","text":"Not for every SKU, but variant-specific claims need variant-specific video. If the difference between two SKUs is visible, such as color, pack count or size, a shared video misrepresents at least one of them. A practical split is variant-level video for visually distinct options, and shared parent-level video for care, assembly or sizing content that genuinely applies to all."}},{"@type":"Question","name":"Where should the video transcript live?","acceptedAnswer":{"@type":"Answer","text":"In two places. Put it in the transcript property of your VideoObject markup so structured data consumers can read it, and publish it as visible text on the page so systems that never parse JSON-LD can index it too. Write it to include the literal attributes the product is sold on: size, material, pack count, fit and compatibility."}},{"@type":"Question","name":"Will adding video improve my visibility in AI search?","acceptedAnswer":{"@type":"Answer","text":"Tagged video gives an agent information it did not previously have about your product, and untagged video gives it none. That is the defensible claim. Whether it changes your placement depends on the surface, your category and your competitors, so treat it as a test on your own catalog rather than a guaranteed gain, and measure per-surface rather than in aggregate."}}]}]}