Franchise With 40 Locations: One Ad Per Store With Bulk Runs

Queue one Format run per store in a single bulk request. A queue holds 1 to 100 items, runs at concurrency 1 to 16, and each run carries its own spend cap.

4 min readSume
All posts

How do you make a local ad for each of 40 franchise locations without 40 manual sessions? Send one bulk request to a Sume Format with one item per store. A bulk run queues between 1 and 100 items, so 40 stores fit in a single queue with room to spare.

The trick is treating the ad as a template. The brand supplies the structure once, and each item changes only what is local: the store name, the neighbourhood, the offer and the opening hours.

How a bulk queue works

You POST to /v1/formats/{handle}/{slug}/bulk-runs with an items array. Each item has the same body as a single Format call, and the docs say an item must name at least one of instruction, input, previous_run_id or attachments. The request also takes a concurrency integer from 1 to 16, which is how many items run at once.

You then poll GET /v1/format-run-queues/{id} for the queue and read each child run at GET /v1/format-runs/{run_id}. The Bulk runs page lists the 400 cases: concurrency outside 1 to 16, an empty or oversize items array, or an item that names none of the four inputs. A bad item reports its index in details.index, so you can fix store 17 without re-sending the rest.

Limits worth knowing before store 1

Each run can carry generation_spend_cap_usd, up to $500, so a mistaken item cannot burn a large budget. Webhooks are set per run through communication.webhook_url, so your system hears about each store as it finishes instead of polling all 40.

Keys matter too. The Format run routes need the formats:write and formats:read scopes, and service-account keys cannot create Format runs, so run the franchise batch with an ordinary user key. Pick the slug from the Format catalog; for a local product offer, a UGC-style or product-commercial slug under the sume handle is the usual starting point.

Bulk-run limits from the Sume docs (read 2026-10-10)
SettingAllowed valueWhy it matters for 40 stores
items1 to 100 per queueAll 40 stores in one request
concurrencyInteger 1 to 16Trade speed against load
generation_spend_cap_usdUp to $500 per runCaps one bad item
Key typeUser key, not service accountService accounts cannot create runs

Keeping the 40 ads consistent

Write the brand rules into the shared part of every item: the colour palette, the tone, the line about the offer, the call to action. Then put only the store facts in the part that changes. If one store comes back off-brand, the previous_run_id input lets you iterate on that single run rather than starting again.

Do a two-store pilot first. Run a queue of two with concurrency 2, review both children, then send the other 38. A pilot costs two runs instead of forty, and it is where you find that the offer line is too long or the neighbourhood name breaks the layout.

A rollout order that holds up

Run the pilot, fix the shared text, queue the remaining stores, and collect finished runs through the webhook. Keep a record on your side keyed by store number, so a retry never queues a second ad for the same location.

Franchise marketing is mostly consistency under repetition, which is exactly what a queue is for. The API supplies the repetition; you supply the template and the local facts.

What this does not do for you

A queue does not know your brand. It runs whatever you put in each item, so a typo in the template is a typo times forty. It also does not publish anything; finished runs are results you collect, review and post through your own channels.

Local legal copy is another reason for human review. Offers, opening hours and claims differ by state, and a franchise owner will want to approve the ad for their own store. Treat the bulk run as a fast first draft for every location, then let each store sign off.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume