GoatLabelsGoatLabels
Same cohort. New batch. Every month.

Shipping Patreon rewards without a fulfillment service


Export, validate, buy. Repeat next run.

Connect Patreon and every active patron on a shipping tier, with the address on their Patreon profile, lands in one To Ship queue. Validate each address, compare USPS, UPS and FedEx on domestic parcels and DHL on international ones, and buy from one prepaid wallet. Repeat runs batch from the patron export with a saved mapping; tracking is not sent back to Patreon.

Every row quoted, every address re-checked

Each patron row is validated and priced across USPS, UPS and FedEx (DHL on international rows) before the batch buys, because between any two runs, somebody moved.

UPSFedExDHLUSPSper row
Drift caughtValidated every run.
Preset reusedMapped once, kept.
All-in pricesOne per carrier.

A wallet with no opinion on your cadence

Monthly, quarterly, or annual runs draw on one prepaid balance funded by card, Apple Pay, Google Pay, ACH, or crypto, and on Free the months between runs cost nothing; a run month past 50 shipments needs Pro ($40 a month, no minimum term), which you can cancel after the run.

VisaMastercardAmerican ExpressApple PayGoogle PayBitcoinEthereumTether (USDT)
Prepaid balanceSpent per row.
No subscriptionGaps on Free cost zero.
Row-level ledgerEach reward traceable.

Updated

Connect Patreon and the shipping-tier cohort lands in To Ship

Patreon is a live connector. Click Connect Patreon on the Connect page in your dashboard and approve access on Patreon; there is no store URL to paste. GoatLabels then imports every active patron who is entitled to at least one tier that requires shipping and whose Patreon address has a street, a city, and a country. Each of those patrons becomes one draft in To Ship, addressed to the recipient on their Patreon address (or the patron's name), with the tier title as the item description. The pledge amount is never used as a declared value.

New patrons keep arriving on their own: Patreon notifies GoatLabels when a membership or pledge is created or changes, and background polling picks up the rest. The import is once per patron, though. A patron imported once is not drafted again by a later sync, so connecting brings in the current shipping-tier cohort plus every patron who joins after it, not a fresh copy of the roster each month. Two habits finish the setup. Patreon sends no parcel size, so set the reward box's weight and dimensions from a saved parcel preset before you buy. And tracking is not sent back to Patreon, which has no API for it, so tell patrons the run shipped in your own post or message.

A reward run is a recurring batch, not a campaign

Crowdfunding fulfillment and Patreon fulfillment get lumped together, and they should not be. A campaign ships once: one enormous batch, then silence. That shape, and the way backer-survey addresses age between pledge and print, is the Kickstarter page's territory. A Patreon reward run is the opposite animal. It repeats, monthly for some tiers and quarterly for others, and it ships to substantially the same cohort every time. The list is not one frozen snapshot but a living roster: a few patrons join, a few lapse, and the core carries over from run to run.

That repetition changes what the workflow should optimise for. A one-shot batch can afford a slow, careful setup because it never happens again. A recurring batch cannot: whatever the first run cost you in setup, the tenth run should cost almost none of it. The three sections below are the three places the cadence bites: the addresses that silently change between runs, the column mapping you should never have to rebuild, and the returned parcel that is actually your cohort telling you something. Get those three right and a reward run becomes an hour a month, not a weekend.

How do I handle patrons who moved between runs?

Between any two runs, some fraction of your cohort moved. People change apartments, leave college towns, or fix a typo in their head and never in their profile, and a patron whose address changed has no reason to remember that your fulfillment depends on it. This is drift: the list decays a little every month, and the decay compounds precisely because the cohort persists. Ship a stale export quarterly for a year and the same wrong address can eat four parcels before anything forces the correction.

The defence is to validate every row on every run, no matter how many times the same rows have validated before. Export the patron list fresh each run (never reuse last quarter's file, because a stale file is drift you chose) and let the batch validator check each address before any label is bought, with a residential or commercial classification on every row. Give the connector's drafts the same check before you buy them. The rows that fail are the drift, caught while it is still a message to a patron rather than a parcel in a returns pipeline. The cost asymmetry is stark: a flagged row costs a moment of attention, while an unflagged bad address costs the item, the postage, and the patron's month of waiting, and the run-over-run cadence multiplies whichever one your workflow chooses.

Why does the second reward run take minutes?

Run one can come straight from the connector, with the shipping-tier cohort already waiting in To Ship. Because the connector drafts each patron once, repeat runs to that same cohort start from Patreon's export, which puts patron addresses in its own columns. Those columns have to be paired with shipping fields: name to name, street to street, tier kept as a reference so the right reward goes in the right box. Do that pairing once, on the first run you export, and save it as a preset. The full mapping-validation-purchase mechanic is the bulk CSV page's to explain; what matters here is what the preset does to a cadence. Run two loads the saved mapping against the fresh export and the setup step simply disappears: export, load preset, validate, quote, buy.

This is the quiet argument for treating recurring fulfillment as a batch discipline rather than a monthly improvisation. The parcels help too: reward runs ship near-identical packages, so a saved parcel preset carries the weight and dimensions across the whole file, and it is also how the connector's drafts get a real box size, since Patreon sends none. The quote runs per row against USPS, UPS and FedEx (DHL on international rows) with an all-in price on each. The batch buys row by row from one prepaid wallet, so one flagged address holds back one parcel, never the run. By the third run the entire loop is muscle memory measured in minutes, which is exactly what a task you will do twelve times a year deserves.

Returned parcels as the feedback loop for patron addresses

Even a validated list will occasionally bounce a parcel, because validation proves an address exists and is deliverable in form, not that your patron still lives there. On a one-shot campaign a return is pure loss. On a recurring batch it is information: the return names exactly which cohort member's record is stale, in time to fix it before the next run compounds the error. That reframing is the closest thing recurring fulfillment has to a free lunch, and it only works if returns feed corrections: a returned box you reship without updating the patron's record is a box you have scheduled to bounce again next quarter.

So close the loop deliberately. When a reward comes back, message the patron, get the current address, and fix it at the source (their Patreon profile) so every future export inherits the correction, then reship from the wallet. What each carrier does with an undeliverable parcel, and who pays the ride home, is the returned-to-sender page's territory. And if the numbers tempt you toward a fulfillment service instead, run the arithmetic first: on Free (up to 50 shipments a month) a quarterly run of up to 50 patrons costs only postage four times a year, and a larger run needs Pro ($40 a month, no minimum term), which you can cancel once the run has shipped, and the address-drift checks above already cover the work a fulfillment service would charge for.

One reward run, start to finish

Export, load the preset, and the run is already half done.

A recurring run is judged by what it costs the tenth time, not the first. This is the loop that gets cheaper with repetition: pull a fresh patron export, load the mapping you saved the first time, let every row revalidate whether or not it validated last quarter, quote each row across USPS, UPS and FedEx (DHL on international rows), and buy row by row from one prepaid balance.

1
A fresh export, every repeat run
Never last quarter's file
patron message

hey, I moved in March, can this quarter's print go to the new place?

Shopify
Synced, if the merch shop is yours too
TikTok Shop
Synced, same queue, same wallet
Patreon patron export
Patron name
Mapped once, saved as a preset
Address
Revalidated on every run, no exceptions
Tier
Kept as a reference, so the right box ships
Parcel
From your saved preset, not from the file
Drop this run's patron export

Connected patrons arrive in To Ship once, the first time they qualify. Each later run starts from a fresh export, and that is not busywork: it is the step that lets a patron's own profile correction reach your labels.

2BillyBilly AI

Revalidating a cohort that quietly drifts.

Billy AI
  • Checks every row on every run, however many runs that patron has already survived
  • Flags the defects while they are still a message to a patron, not a parcel in a returns pipeline
  • Classifies each row residential or commercial before any money leaves the balance
  • Drafts the one-off replacement reward from a pasted patron message, on every plan
Revalidated. Preset loaded. Rows priced.
3
The run buys row by row
One flagged row holds one parcel
Paid from the prepaid wallet
Card, Apple Pay, Google Pay, ACH, or crypto
all-in
USPS
Row purchased
Cheapest carrier for that row
all-in

Nothing is carried over from last quarter: rates are re-quoted per row, so a patron who moved three zones out changes carrier without you noticing. A row that fails validation waits for its correction while the rest of the run ships.

Patreon is on this grid, beside 13 store connectors

Patreon connects. So does the shop beside it.

Patrons on a shipping tier arrive in To Ship with the address on their Patreon profile. Store sync covers Shopify, Etsy, WooCommerce, TikTok Shop, Amazon, eBay, Squarespace, Wix, Walmart, Square, BigCommerce, Magento, and Temu, and pushes tracking back to those stores. Patreon has no tracking API, so tell patrons the run shipped in your own updates.

Shopify logoShopify
Etsy logoEtsy
WooCommerce logoWooCommerce
TikTok Shop logoTikTok Shop
Amazon logoAmazon
eBay logoeBay
Squarespace logoSquarespace
Wix logoWix
Walmart logoWalmart
Shopify Plus logoShopify PlusSoon
Square logoSquare
BigCommerce logoBigCommerce
Magento logoMagento
Zapier logoZapierSoon
NetSuite logoNetSuiteSoon
Ecwid logoEcwidSoon
Temu logoTemu
Shein logoSheinSoon
ChannelAdvisor logoChannelAdvisorSoon
SkuVault logoSkuVaultSoon
Zoho Inventory logoZoho InventorySoon
Patreon logoPatreon
Built for the run-over-run loop

The first run is setup.
Every run after is cadence.

Recurring fulfillment rewards whatever amortises: mappings that persist, presets that carry parcels, validation that runs itself. Each piece below exists to make run ten cheaper than run one.

Postage on your rhythm,
not a plan's

One prepaid balance funded by card, Apple Pay, Google Pay, ACH, or crypto, debited when a label is bought (and, on Pro, for the $40 monthly fee). A monthly tier, a quarterly tier, and an annual tier can all draw on it, and the eleven quiet months of an annual tier owe nothing on Free; if the run needed Pro, cancel it afterwards.

Wallet balance
$1,247.36USD
AI

Validation that treats
every run as run one

Every row is re-validated on every run with a residential or commercial classification, no matter how many runs that patron has survived. Drift does not announce itself: the check that catches it has to be unconditional, and here it is the default rather than a discipline.

BillyBillyLIVE
Where's the package to Maya?
It's in transit via UPS. Expected Friday, Aug 7.
UPS
1Z8923A6B05G4123456
In transit
Austin, TX → Dallas, TX
Ask Billy anything...

Saved mappings
and saved parcels

The Patreon export's columns are paired to shipping fields once and saved; the reward box's weight and dimensions are saved once too. Run two is export, load, validate, buy: the setup work exists exactly once in the life of the tier, which is the whole economics of a recurring batch.

Shipment summary
UPS Ground$12.49
Insurance$0.75
Fuel surcharge$0.32
Total$13.56

Every carrier,
re-quoted per run

USPS, UPS and FedEx (DHL on international rows) are priced per row on every run rather than locked in once, so a rate change between quarters, or a patron who moved three zones out, changes which carrier wins without you noticing or caring. The quote tracks the cohort as it drifts.

Compare rates
UPSUPS$12.48
FedExFedEx$13.22
DHLDHL$14.10
USPSUSPS$11.79
Duties inside the quote where DDP applies

An API for creators
who script their runs

Creators with a developer in the community can drive the same loop over REST: quote, buy, and track per row with signed webhooks and real idempotency keys, unlimited calls on every plan: a reward run as a script that fires the morning after the tier bills.

POST /v1/shipments
{
"to": { "name": "Maya" },
"from": { "name": "Alex" },
"service": "ups_ground",
"label_format": "pdf"
}
Webhook delivered
GoatLabels mobile queue showing a Patreon reward run purchasing row by row
Billy drafting a replacement reward label from a pasted patron message on mobile

Run row bought

Quarterly print tier | Providence, RI

A run does not need a desk

Watch the run finish from the studio floor.

Reward runs get packed wherever the boxes are. The batch itself starts on a laptop, from the connected queue or a file, but everything after it (which rows are still flagged, which patron needs messaging, the replacement for the one who moved) belongs on the phone in your apron pocket.

See which rows of the run are flagged, bought, or still waiting on a patron's reply.
Paste the message from the patron who moved and Billy drafts the corrected label from it.
All-in prices on that one-off parcel, quoted the same way the batch quoted the run.
One tap prints the row's label to the share sheet or a thermal printer over Wi-Fi.
Bought a row against a stale address? Void it and, after the carrier accepts the void, the credit is back for the reship.
Billy is on every plan, quiet months included

Ask about one patron's reward with a box in each hand.

Packing a hundred near-identical rewards is a two-handed job, and the question that interrupts it is always about exactly one patron. Ask out loud and Billy finds that row's shipment and reads the status back, which is also the answer you owe whoever messaged you. Included on every plan, so the eleven silent months of an annual tier cost nothing to keep it. This is the real product, not a render.

goatlabels.io/dashboard/shipments, Billy
Billy reading a reward run shipment's tracking status back over the purchased labels list

Listening

"Did this quarter's print ship to Priya yet?"

Out for delivery

Quarterly tier | Providence, RI | scanned this morning

Speaks plain English, remembers your saved parcel presets between runs, and is included on every plan, never a paid tier.

All-in quotes, per row

A hundred identical boxes are still a hundred quotes.

A reward run tempts you into flattening the whole file onto one carrier, because the boxes really are identical. The addresses are not: the same parcel to a patron three zones further out is a different price, and re-quoting every row on every run is what stops the cohort's drift from quietly costing you. Each column is one all-in number locked at quote time. Figures are illustrative.

Denver, CO to Austin, TX1.4 lb10x7x4 in
Cheapest for this row
USPS

USPS

Ground Advantage

2-5 days

$7.40

$1.20 of Premium insurance included

all-in, one balance for the whole run

UPS

UPS

Ground

3-4 days

$10.80

$1.20 of Premium insurance included

all-in, one balance for the whole run

FedEx

FedEx

Home Delivery

2-4 days

$11.40

$1.20 of Premium insurance included

all-in, one balance for the whole run

Re-quoted every run, never carried overVoid a row bought on a stale address and the credit returns to your wallet once acceptedEvery row traceable to its patron
Public API v1

A reward run as a script that fires after the tier bills.

Recurring is the word that makes an API worth having: the same run, on the same cadence, indefinitely. Creators with a developer in the community can drive the whole loop in code (pull the roster, validate, quote, buy) with unlimited calls on every plan, so automating a monthly run never moves you onto a pricier one.

Quote and buy per row from your own loop, with no per-request pricing, ever
Real idempotency keys, so re-running a batch never buys a patron a second label
Signed webhooks instead of polling, so returns and exceptions surface between runs
OpenAPI 3.1 spec, no SDK lock-in, and unlimited calls on Free
Read the API docs Get a free API key$0 on every plan
curl https://api.goatlabels.io/api/v1/shipments
POST /api/v1/shipments
Authorization: Bearer sk_live_…
Idempotency-Key: ord_8421

{
  "to": { "name": "Joyce", "city": "Berlin", "country": "DE" },
  "parcel": { "weight": 2.6, "weight_unit": "lb" },
  "service": "fedex_intl_priority"
}
Priced for a cadence with gaps

Pay when the run ships. Owe nothing in between.

A reward run is a burst of postage followed by weeks of silence, and a monthly software fee taxes the silence. Here the Free plan covers 50 shipments a month, batches included, and the wallet only moves when a label is bought. Past 50 a month, Pro is one flat monthly plan with unlimited shipments.

Pro

Most popular
$40/ month
Unlimited shipments, for the tier that took off
Unlimited address validation
Billy AI on Telegram Telegram logo to check a run's tracking without opening the dashboard
API access still free and unlimited

Rate by plan

illustrative
FreePro

Pro: one flat monthly plan, unlimited shipments

Free

$0 / forever

A quarterly run of up to 50 patrons, four times a year, on the plan that costs nothing.

50 shipments a month, no monthly fee
CSV batches with saved column mappings and per-row validation
USPS, UPS and FedEx rate-shopped on every domestic row; DHL on international lanes
Billy AI in the web app for the one-off reward and the moved patron
REST API with unlimited calls; fund by card, Apple Pay, Google Pay, ACH, or crypto

Billy covers the stragglers

The patron who messages a new address the day after the run, the one-off replacement reward: paste the message and Billy drafts the label, validated before you pay. The batch handles the cohort; Billy handles the exceptions.

Web, every planTelegram logoTelegram, Pro

API free on every plan

GET /api/v1/shipments

200 OK · plan: free

Unlimited calls on Free, still unlimited on Pro.

Compare on your own invoice

Put a real parcel through and compare the side-by-side rate against what that label costs you on

ShippoPirate ShipShipStation
No contractsNo monthly feeStart in seconds
USPSUPSFedExDHL

Label prices are quoted live from USPS, UPS, FedEx, and DHL as one all-in number per row, and that exact amount leaves the prepaid balance when the row is bought. Full pricing details

Cadences, and what each one costs to run

Four reward rhythms. One amortised loop.

Monthly, quarterly, annual, or the tier that ships once: drift and setup cost land differently on each of them, and the saved preset is what flattens all four.

Monthly zine and print tiers

TikTok logo Twelve runs a year, same cohort

Highest drift

The cadence that compounds fastest: twelve chances a year for an address to go stale, and twelve chances to catch it. Revalidating every row on every run is what turns a recurring loss into a recurring correction.

1 saved mapping, reused every run every row revalidated live quotes per row
goatlabels.io/dashboard/shipments
GoatLabels shipments queue showing a Patreon reward run purchasing row by row

Quarterly box tiers

Etsy logo Four runs, near-identical parcels

A quarter is long enough for a cohort to drift and short enough that setup cost still matters. Saved parcel presets carry the box across the whole file, so the work per run is the export and the two messages to the patrons who moved.

Run loaded from the saved preset

Columns paired once, on run one, and never again

Telegram logo

Creators fielding the follow-ups

Instagram logoTelegram logo The patron who writes after the run shipped

just saw the shipping email, I moved last month!
New address validated, replacement drafted

Annual and one-shot reward tiers

Shopify logoWooCommerce logo Eleven months of nothing at all

0

owed in every month the run does not ship

Patreon reward shipping FAQ

How do I get patron addresses into shipping labels?
Connect Patreon from the Connect page in your dashboard, and every active patron on a tier that requires shipping, with a street, city, and country on their Patreon address, arrives in To Ship as one draft. The connector imports each patron once, so for repeat runs export the patron list from Patreon, upload the file, and map its columns to shipping fields once; the mapping saves as a preset for every later run. Either way, each row is validated and quoted across USPS, UPS and FedEx (DHL on international rows) before you buy, and the batch purchases row by row from one prepaid wallet.
What happens when a patron moved since the last run?
If the profile was updated, the fresh export simply carries the new address, which is why each run should start from a new export, never a reused file. If it was not updated, per-row validation usually flags the defect before you pay, and a parcel that ships anyway comes back as a return that names exactly whose record is stale. Fix it on the patron's profile so every future export inherits the correction.
How do recurring reward runs differ from a one-off campaign?
A campaign ships one frozen list once, so its problem is addresses that aged between pledge and fulfillment; that story lives on the Kickstarter page. A reward run repeats against a living cohort, so its problems are drift between runs and setup cost per run. The fixes are cadence-shaped: fresh exports, validation every time, and a saved column mapping so run two costs minutes instead of an evening.
Do annual-reward tiers need shipping software the rest of the year?
No, and they should not pay for any. An annual run means eleven months in which nothing ships, and a prepaid wallet on Free costs exactly nothing in those months: no monthly fee, and the annual run fits in Free's 50 shipments a month or one month of Pro. The saved mapping and parcel presets wait unchanged, so the once-a-year run starts from the same three steps as a monthly one: export, load preset, validate.
Does GoatLabels connect to Patreon?
Yes. Click Connect Patreon on the Connect page in your dashboard; no store URL is needed. Every active patron entitled to a tier that requires shipping, with a street, city, and country on their Patreon address, becomes one draft in To Ship, and new patrons arrive as they join. Each patron is imported once, so repeat runs to the same cohort use the patron export with your saved column mapping. Tracking is not pushed back to Patreon, which has no API for it. If the merch shop beside your Patreon runs on Shopify, Etsy, Amazon, eBay, Walmart, TikTok Shop, or another of the 13 store connectors, store sync brings those orders into the same queue.

Related: Kickstarter fulfillment,bulk labels from a CSV,why parcels come back,subscription box shipping, andthe full pricing model.

Real sellers, real words

What creators say once the run stops eating a weekend.

A video took off and I had 80 TikTok Shop orders by morning. I printed every label from my phone on the bus to the post office.
E

Early customer · TikTok

TikTok Shop seller

TikTok logo TikTok Shop
I run my Etsy shop from the kitchen. The AI reads the order, picks the carrier, the label prints. That's the whole workflow now.
E

Early customer · Etsy

Etsy maker

Etsy logo Etsy
The API is what every shipping API pretends to be. Idempotency that actually works.
S

Sasha R.

Staff engineer, marketplace

API user
Run ten should take minutes. Start amortising.

This month's run,
mapped for every month after.

Connect Patreon or export the patron list, validate every address, and buy the run across USPS, UPS and FedEx (DHL on international rows) from one prepaid wallet. Next run, do it again from the export with the saved mapping, minus the setup.

No card required. No contract. No subscription on Free between runs.

Updated