Merchant Center conversational attributes: draft them as JSON

Conversational attributes add richer context to product listings. Draft them per SKU as schema-bound JSON from a Sume Format run, then review before upload.

4 min readSume
All posts

Conversational attributes are extra product details you submit to Google so shoppers' questions can be answered with richer context. Sume can draft candidate text for them: bind a JSON Schema to a Format run and read back typed, validated JSON per SKU. Sume does not upload to Merchant Center, so a person reviews and submits.

Google facts are from its September 2026 holiday shopping post, read 2026-09-30. Sume facts are from Structured output and the Format catalog. The Google post does not give the attribute names or field limits, so take those from Merchant Center's own help.

What does Google say about conversational attributes?

Google recommends submitting them to add richer context to product listings. It reports that in testing with one retailer, submitted attributes were incorporated 50% of the time in relevant product recommendations in AI Mode. That is Google's figure from a single test, not a guarantee.

How do I get typed JSON from a run?

Send output_schema on the run with a name, strict and a schema. The docs' own example passes "input": { "product_url": "https://example.com/p" } and a schema with additionalProperties: false. The run's text comes back projected into your object. A schema outside the supported subset returns 400 output_schema_invalid: nothing runs and nothing is charged.

const schema = {
  name: "acme/conversational-attrs/v1",
  strict: true,
  schema: {
    type: "object",
    additionalProperties: false,
    required: ["best_for", "not_for"],
    properties: {
      best_for: { type: "string" },
      not_for: { type: "string" },
    },
  },
};

const res = await fetch("https://api.sume.com/v1/formats/sume/sume-recreate/runs", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.SUME_API_KEY,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    instruction: "Draft who this product is best for and not for, using only the page.",
    input: { product_url: "https://example.com/p" },
    output_schema: schema,
  }),
});
console.log(res.status);

Which Format should I call?

Choose one whose output_kind is text or that suits your input; read it first with GET /v1/formats/sume/{slug}. The sume-recreate slug above is a placeholder: confirm its io profile fits before relying on it, because a Format built for video may spend on generation you do not want. Set generation_spend_cap_usd on the run to bound it.

What should a human check before upload?

Every sentence against the product page and your return and shipping terms. Drop anything the page does not support, since the schema guarantees shape, not truth. Batch many SKUs with a bulk run style loop if the catalog is large.

Roles in the workflow, read 2026-09-30
StepWho
Draft attribute textSume Format run with output_schema
Verify claimsYou
Submit to Merchant CenterYou, in Google's tools

Sources

Related posts

More in Developers

All Developers posts

Written by Sume