Menu
Sign up

Speaker promo graphics: a card for every speaker from one spreadsheet

Make speaker announcement cards and "I'm attending" graphics for every conference speaker from one CSV: a batch run, all sizes and a ZIP, measured.

Published November 8, 2026 · 4 min read

A conference announces its speakers one by one, and each announcement is a graphic: the speaker's photo and name, the talk title, the date. Then speakers are asked to share their own card, and attendees an "I'm attending" one. For 40 speakers in three sizes that is 120 graphics, usually made by hand in a design tool the week before. This page does it from a spreadsheet in one batch, with what we measured.

How we measured. On 2026-11-08 we ran a batch of the speaker-card template from a three-row CSV in three sizes through our API on our development stack, downloaded the ZIP, and rendered one attending-event card on its own. Speakers and companies are made-up examples.

The spreadsheet

One row per speaker, one column per template field. The speaker-card fields are title (the talk), name, role, event, label, date, site and photo (an image URL):

id,name,role,title,date
ada-example,Ada Example,Staff Engineer at Northwind,Caching images at the edge,12 March 2027
ben-sample,Ben Sample,Designer at Tailspin,Templates that survive long titles,12 March 2027
chloe-demo,Chloé Démo,CTO at Contoso,One template every size,13 March 2027

The id column names the files. Columns named like the fields are matched automatically; others can be mapped with columns. A speaker without a photo gets a tile with the first letter of their name, so the series stays complete while photos are still coming in — add the photo column later and run it again.

One batch, every size

curl -X POST "https://shareglint.com/v1/batches" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile csv speakers.csv \
        '{template: "speaker-card", csv: $csv, sizes: ["og", "square", "story"], name: "Speakers 2027"}')"

The request returned 202 with the batch id and "total": 9 — three speakers times three sizes. Polling GET /v1/batches/{id} showed it complete after 11.1 s, with counts of 9 completed and 0 failed, an image URL per row and size, and a ZIP:

In the ZIP Size
ada-example-og.png (2400×1260) 93 KB
ada-example-square.png (2160×2160) 104 KB
ada-example-story.png (2160×3840) 136 KB
… the same for ben-sample and chloe-demo 86–129 KB each
Whole ZIP, 9 files 967 KB

The accents in "Chloé Démo" came through in the image and the file name stayed the id. Instead of polling, pass webhook_url and receive one batch.completed event with the ZIP's address. The CSV can also be a Google Sheets link shared with "anyone with the link" (Google: share files), so the programme team keeps editing the sheet and you re-run the batch. Rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000; the full flow, including the dashboard's no-code version, is in bulk images from a sheet.

"I'm attending" cards

The second graphic of a conference campaign is for everyone else: attendees, sponsors, volunteers. The attending-event template takes name, role, title, company, event_name, date, location, booth, ticket_url, photo and event_logo. One card for a speaker, square:

{"template": "attending-event", "size": "square", "modifications": {
  "name": "Ada Example", "title": "Staff Engineer", "company": "Northwind",
  "event_name": "Frontend Days 2027", "date": "12–13 March 2027",
  "location": "Warsaw", "ticket_url": "frontenddays.example/tickets"}}

It rendered in 1.47 s as a 2160×2160 PNG: "ATTENDING" across the top, the person's initials in a circle where no photo was given, then the name, title and company, and the event, date, city and ticket link on a ticket-shaped panel. For attendees, put a signed URL behind a "get your card" button on the registration confirmation page: each person's card renders when they first open it (signed image URLs).

Getting speakers to share

The graphics only help if they are posted. What makes that likely is mostly logistics:

  • Send each speaker their own files, not a link to a folder of everyone's: their card in all three sizes, plus the talk's URL.
  • Write the post for them. Two or three lines they can paste and edit, with the event's handle and hashtag.
  • Time it. A couple of weeks before the event for the announcement, and again the week of the talk with the room and time.
  • Make the talk page preview well. When the speaker shares the talk's URL instead of the image, the platform shows that page's og:image; point it at the same card. The Open Graph protocol "enables any web page to become a rich object in a social graph", and the card is that object's picture.

When the programme changes

Talk titles change, speakers drop out, a photo arrives late. Edit the row in the sheet and run the batch again: rows whose fields did not change are served from the cache, so only the edited speaker is rendered again, and the ZIP is rebuilt with the new file under the same name. Keep the id column stable (a slug of the speaker's name, not the row number), so a file never changes owner when rows are sorted or inserted, and send the speaker their new card with a short note on what changed.

Sizes

Where Size preset Picture at 2×
Link previews, X, LinkedIn posts og (1200×630) 2400×1260
Instagram and LinkedIn feeds square (1080×1080) 2160×2160
Instagram and Facebook stories story (1080×1920) 2160×3840

Every other network's sizes, with sources, are on social media image sizes.

Cost

Each image is one render of the quota: 40 speakers in three sizes are 120 renders. Re-running a batch with unchanged rows serves those images from cache: our second run of the same CSV completed in about 2 s and used no quota (pricing). For the rest of the event's graphics — tickets, badges, schedules — see event graphics.

FAQ

How do I make speaker announcement graphics for a whole conference?

Put the speakers in a spreadsheet — name, role, talk title, date, photo URL — and render one template per row. With our batch endpoint, one request with the CSV and the sizes you need returns every card plus a ZIP; in our test, 3 speakers in 3 sizes gave 9 images in 11.1 s, named by the speaker's id column.

What sizes do speaker cards need?

A 1200×630 card for link previews, X and LinkedIn, a square for Instagram and LinkedIn feeds, and a 1080×1920 story for Instagram and Facebook. Rendering all three from one template keeps the series consistent; in a batch, list the sizes once and every row gets each of them.

How do I get speakers to share their card?

Make it easy and personal: send each speaker their own card in every size, the text of a suggested post, and the talk's link, a couple of weeks before the event. An "I'm attending" card in the same design lets attendees and sponsors join in.