Skip to content

Can I push listings to Etsy as drafts instead of publishing them live?

Yes. Etsy's own API creates listings in a draft state, and a draft only goes live when something explicitly sets it to active. Mirra hardcodes draft on every Etsy push. Publishing is a separate opt-in, per shop or per batch, off by default, so a bulk run never puts unreviewed listings in front of buyers.

Last updated July 28, 2026

Can I push listings to Etsy as drafts instead of publishing them live?

Yes, and on Etsy the draft is the default path rather than a workaround: the API endpoint that creates a listing is named createDraftListing, and going live is a second, separate call.

Etsy's OpenAPI spec describes the create endpoint in one line: it creates a physical draft listing product in a shop on the Etsy channel. There is no flag on that call that makes the listing live. Going live is a later update, and Etsy's spec is equally direct about what that update does. Setting a draft listing to active will also publish the listing on etsy.com, and it requires that the listing have an image set.

That second sentence is worth reading twice if you sell at volume. Etsy will not activate a listing with no photo. So the order matters: create the draft, attach the images, set the price and inventory, and only then flip the state. A tool that publishes first and uploads images second is one network error away from an empty live listing.

Mirra follows that order and does not offer the shortcut. The Etsy push composes its create payload with the state field set to draft, always, with a comment in the source calling auto-publish-to-active a permanent non-goal. Images upload next, then the size and price inventory, then any required category attributes. Only after all of that does the job consider publishing, and only if you asked it to.

Publishing is resolved from two switches: a per-shop default and an optional per-batch override, where the override wins if you set it and inherits the shop default if you do not. Both start off. The end-to-end default is a draft, which means the failure mode of forgetting to configure anything is a shop full of drafts, not a shop full of live listings you have not read.

This is the take most listing tools will not make. A tool that publishes for you is selling you a number of listings per hour. A tool that refuses to publish for you is telling you that the last look is yours, because the listing carries your shop name and not ours.

Draft, then active
Etsy's spec: createDraftListing makes a draft; a later update to state active publishes it on etsy.com and requires an image. Both statements are in Etsy's machine-readable OpenAPI document.
Mirra's choice, not Etsy's rule
Etsy's API would happily let a tool create a draft and activate it a second later. Mirra defaults to leaving it as a draft. That is a product decision about who signs off, not a platform limit.
Fees follow publishing
Etsy publishes its fee schedule at etsy.com/legal/fees: the listing fee is charged when a listing is published or renewed. A draft you never activate has not triggered it. Check the current rate on that page rather than trusting a number in a blog post.

When you do switch autopublish on for a batch, Mirra flags the batch with a fee warning and refuses to publish any listing whose images failed to upload. The warning is not a block. You opted in, and Etsy bills per published listing.

How do I turn a folder of 50 designs into Etsy listings?

You drop the whole folder at once, each file becomes its own queued job, and you come back to a list of drafts you review before anything reaches Etsy.

The upload runs first and runs per file. Each design goes straight from the browser to storage in 6 MB chunks over a resumable protocol, so a dropped connection resumes the chunk instead of restarting the file. The uploads run concurrently and partial success is kept: if three files out of fifty fail, you keep the forty-seven and get one summary error for the rest, rather than losing the batch.

After a file lands, the backend creates one job row for it. This is the part worth understanding, because it sets the shape of everything else. One design is one job is one listing. There is no combined job that processes the folder as a unit, which is why a single bad file cannot poison the other forty-nine.

A durable queue picks the jobs up. It polls the jobs table every five seconds and runs two at a time. Ten minutes is the hard cap on any single job, enforced with an abort signal, after which the row is marked as an error rather than left running forever. Job creation is separately rate limited to twenty per minute.

So be clear-eyed about what a fifty-design drop actually is: fifty rows moving through a two-wide queue. It is not instant and it is not a single API call. What it is, is unattended. The queue lives in the database rather than in a worker's memory, so a backend restart mid-batch does not lose your jobs. Rows that were running when a process died are requeued at boot, and rows that stall without a heartbeat get swept back into the queue by a reaper.

Failures surface per design, in the row for that design, with the error text attached. A job that errors stays errored. There is no automatic re-run of a failed generation, and you should not plan around one. Regenerating is a thing you ask for.

Queue concurrency
Two jobs at a time, polled from the database every five seconds. Small on purpose: the generation step calls a vision model and a text model per design, and a wider queue mostly buys you rate-limit errors.
Per-job hard timeout
Ten minutes. A job that exceeds it is aborted and marked as an error, so a hung design cannot hold a queue slot for the rest of the batch.
Cycle allowance
Your plan carries a listing allowance per billing cycle. It is a hard cap checked on the server before a job is created: once the allowance is spent, job creation is refused with a 402. There is no overage and no per-listing surcharge. You cannot spend past it by accident.

Design files are capped at 20 MB each on the generation endpoint. A large flattened PNG from a gang sheet builder can exceed that; flatten and downsample the copy you upload for metadata, and keep your print-resolution file for the printer.

How do I stage a seasonal drop without everything going live at once?

Generate the whole season now, push it to Etsy as drafts, and activate the listings from your Etsy dashboard on the day you want them selling.

A seasonal drop is the workflow the draft default was built for. You generate in October for a November drop, push the batch, and the listings sit in your Etsy shop as drafts. Nothing is public, nothing is indexed, and Etsy's listing fee attaches on publication rather than on the draft, so staging early does not cost you a fee per design for the weeks you sit on it.

Push in batches rather than one at a time. Mirra groups the listings you select into an export batch and the batch carries its own counters for pushed and failed, so triage after a run means reading one summary instead of opening forty listings. A batch tops out at 200 listings.

A listing that fails validation before the push does not stop the batch. It is marked failed with the reason on the row, the batch counter increments, and the job moves to the next listing. The same is true for a listing that fails partway through, after its draft already exists on Etsy: the Etsy listing URL stays on the row rather than being cleared, because you need it to finish the job by hand.

One thing Mirra will not do for a seasonal drop, or any other drop, is choose your price. The AI writes the title, the tags and the description. It never writes a number into the price field. The price comes from the size variants configured on the store, and when a listing is variant-priced the push seeds Etsy's required scalar price from the cheapest variant and then sets the real per-size prices through Etsy's inventory endpoint. A model that has never seen your film cost, your blank cost or your press time has no business setting your margin.

Drafts are not permanent staging. Export batches carry a seven-day life for the downloadable artifacts, and an Etsy draft still has to be activated by you. Put the activation on your calendar the same day you push.

What happens if I upload a gang sheet instead of a single design?

You get one listing for the sheet, not one listing per design on it. Mirra treats one uploaded file as one listing and does not slice a gang sheet into its parts.

This is the honest answer and it is the one most tool pages avoid. If you upload a 22 by 60 inch sheet with fourteen designs tiled on it, you get a single listing describing a fourteen-design sheet. Nothing crops the tiles apart, nothing builds fourteen listings, and no amount of prompt wording changes that.

The vision step does notice. When it analyses a design it sets a flag for whether the image is a multi-design gang sheet, meaning a tiled or gridded layout meant for bulk pressing, and passes that flag into the writing step alongside the subject, the style, the palette and the niche. The result is copy that describes a gang sheet as a gang sheet, in the vocabulary buyers use, instead of copy that describes it as one very confusing t-shirt graphic.

So pick the unit deliberately before you upload. If you want each character on the sheet sold separately, export each one as its own file and upload fourteen files. If you want to sell the sheet as a sheet, which is a real and common DTF product, upload the sheet. The folder you drop is the list of listings you get.

One practical consequence for a gang-sheet shop: the tags are written from what the vision step can see in the whole image. A sheet crowded with unrelated designs gives the writing step a muddier subject than a single design does, and muddy input makes generic tags. Sheets built around one theme describe themselves better than sheets built around whatever was left over.

Can I bulk upload brand-new Etsy listings with a CSV file?

No. Etsy publishes at help.etsy.com/hc/en-us/articles/360000337307 that you cannot bulk upload new listings, and its bulk edit tool changes listings that already exist rather than creating them.

This trips up sellers arriving from platforms where a spreadsheet import is the normal way in. On Etsy the bulk edit tool lives in Shop Manager, you select two or more existing listings, choose an editing option, and apply a change to titles, tags, descriptions or prices. Etsy's own suggestion for creating listings faster is to copy an existing listing and edit the copy.

There is a second reason a spreadsheet was never going to be the answer here, and it is the one from the top of this page. Etsy will not activate a listing that has no image set. A CSV row is text. Even in a world where Etsy accepted a listing spreadsheet, the images would still need a separate upload per listing, and the images are most of the work.

That is why bulk listing creation on Etsy runs through the API rather than through a file. A tool with API access creates the draft, uploads the image bytes to that draft, writes the inventory, and stops. Which is exactly the sequence described above, and the reason the draft state is where a bulk workflow naturally ends rather than somewhere it gets stuck.

Etsy's help page is behind bot protection, so this was read as a search extract of the Etsy-owned page rather than fetched directly. Open help.etsy.com/hc/en-us/articles/360000337307 in a browser and confirm the wording before you plan a quarter around it.

How do I keep titles and tags different across dozens of near-identical listings?

Write each listing from its own design rather than from a template, and spend the fields Etsy's search actually reads: the title, all thirteen tag slots, the attributes and the description.

Every design in a batch gets its own vision pass before anything is written. The subject, the visible text, the art style, the palette, the occasions and the DTF niche are extracted from that specific image, and the writing step sees those fields rather than a shared template with the file name pasted in. Two Halloween designs produce two different subjects, so they produce two different titles.

Etsy's published rules give you the frame. A title can be up to 140 characters, per help.etsy.com/hc/en-us/articles/115015628707. A listing takes up to 13 tags and each tag can hold up to 20 characters, per help.etsy.com/hc/en-us/articles/360000336307. Thirteen is a maximum, not a requirement, though Etsy separately recommends using all thirteen in its Keywords 101 article at etsy.com/seller-handbook/article/382774281517.

The character rules are stricter than most sellers realise, and they come straight from Etsy's spec rather than from folklore. A title may contain letters, numbers, punctuation, mathematical symbols, whitespace and the trademark, copyright and registered symbols, and nothing else. The percent, colon, ampersand and plus characters may each appear only once. Tags are tighter still: letters, numbers, whitespace, hyphen, apostrophe, and those same three symbols. An ampersand is legal in a title and illegal in a tag.

For the near-identical case specifically, Etsy's own title guidance at etsy.com/seller-handbook/article/1399426136697 points away from keyword stuffing and toward clarity, and says search takes a holistic view across the title, the tags, the attributes, the description and the first photo. Practically, that means differentiating two similar listings in the attributes and the tags costs you nothing and reads better than forty titles that differ by one word.

Etsy's Seller Policy at etsy.com/legal/sellers prohibits creating duplicate shops or otherwise acting to manipulate search. That is a rule about shops and about manipulation, not a ban on selling two similar designs. Do not let a blog post convince you that a second seasonal variant is a policy problem.

Etsy's rule: tag characters
Etsy's OpenAPI spec allows only letters, numbers, whitespace, hyphen, apostrophe and the trademark, copyright and registered symbols in a tag. Hashes, slashes, ampersands, plus signs, quotes and parentheses are rejected.
Etsy's rule: title characters
Letters, numbers, punctuation, mathematical symbols, whitespace and the trademark, copyright and registered symbols. Emoji and decorative stars sit outside that set and are rejected. Percent, colon, ampersand and plus may appear once each.
Mirra's rule: no handmade tag
Mirra strips the tag handmade from generated metadata. Etsy does not ban that tag. Mirra's reason is narrower: a printed transfer you did not make by hand is not handmade under Etsy's Creativity Standards, and an inaccurate claim there is a policy problem worth avoiding by default.
Mirra's rule: brand-word screen
Generated tags run through a trademark screen and a hit aborts the job rather than shipping the listing. The word list is Mirra's and is explicitly non-exhaustive. Nothing clearing it is a clearance.

Mirra does not retrieve or analyze third-party marketplace listings. The differentiation comes from reading your own uploaded artwork, not from looking at anybody else's shop. Etsy's Terms of Use prohibit automated access to the marketplace, and a tool that promises competitor tag data is telling you how it plans to break them.

What if my Etsy shop is not connected by API, or I also sell on Shopify?

An unconnected shop exports as a ZIP you copy and paste from, and a connected Shopify store takes the same designs as draft products through a separate push.

Not every shop wants an app connected to it, and some sellers list from an account they cannot authorise. For those, the export path builds a ZIP instead of calling an API. Each listing gets its own numbered folder holding the images in gallery order plus a metadata.txt with the title, the tags and the description in paste-ready form. The archive root carries a README.txt with the listing steps and a manifest.csv with one row per listing, so you can triage forty listings from the spreadsheet rather than opening forty text files.

A shop can start unconnected and be promoted to an API connection later without being recreated, so choosing the ZIP path today does not fork your data.

Shopify works the same way in the part that matters. The push creates the product with its status set to draft, and only sets it active when you have turned autopublish on for that store or that batch. Both push jobs read the same shared helper to decide, so the off-by-default guarantee is written once rather than once per platform.

The descriptions differ by destination on purpose. Shopify gets HTML rendered at push time from the same stored plain-text description Etsy gets, so the two never drift into two separately edited copies of the same paragraph.

Export batches cap at 200 listings, the same as a push batch. Split a bigger season into batches rather than trying to raise the ceiling.

Common questions

Does pushing a draft cost me an Etsy listing fee?

Etsy publishes its fee terms at etsy.com/legal/fees, and the listing fee is charged when a listing is published or renewed. A draft you have not activated has not been published. That is what makes staging a season as drafts cheap, and it is also why turning autopublish on for a batch is a billing decision rather than a convenience toggle.

How many listings can I push to Etsy in one batch?

200. Both the API push and the ZIP export refuse a batch larger than that, with an error naming the count you sent. Split a bigger drop across batches. Each batch tracks its own succeeded and failed counters, so several smaller batches are easier to triage than one large one anyway.

What happens if one listing in a batch fails to push?

The batch continues. The failed listing is marked with its error text and the batch's failed counter increments, while the rest keep going. If the failure happened after the Etsy draft was already created, the Etsy listing URL stays on the row rather than being cleared, so you can open that draft and finish it by hand instead of hunting for it.

Can I turn autopublish on for just one batch without changing my shop default?

Yes. Publishing is resolved as a per-batch override falling back to the per-shop default. Setting the override on one batch affects that batch only, and leaving it unset inherits whatever the shop is set to. Both default to off, so a shop you never configured pushes drafts.

How do I get the same designs onto both my Etsy shop and my Shopify store?

Generate once, then push to each store separately. The generation step can produce Shopify-specific metadata alongside the Etsy fields, because Shopify's limits are different: a longer title allowance, storefront tags used for collections and filters rather than Etsy's thirteen-slot search contract, and a meta description. Both pushes create the product in a draft state by default.

Does the tool set my prices?

No, and this is deliberate. The AI writes the title, the tags and the description and never writes a price. Prices come from the size variants you configure on the store. On a variant-priced listing the push seeds Etsy's required single price from your cheapest variant, then writes the real per-size prices through Etsy's inventory endpoint. A model that does not know your film, blank and labour costs should not be picking your margin.

How long does one design take to generate?

That depends on the model's response time on the day, so treat any published number with suspicion, including ours. What is fixed is the mechanism: two jobs run at once, the queue polls for new work every five seconds, and any single job is aborted at ten minutes. A large batch is bounded by the two-wide queue, not by the upload.

If a generation fails, does it retry automatically?

Not in the way you probably mean. A job whose processing throws is marked as an error and stays there for you to look at. What does recover automatically is a job interrupted rather than failed: rows left running when the backend restarted are requeued at boot, and rows that stop sending a heartbeat are swept back into the queue a limited number of times before being marked as an error. Inside a single generation there is also a short re-prompt loop when the output breaks the title or tag contract, capped at two retries.

Is it better to upload everything at once or add listings weekly?

The tool does not force either. Because pushes land as drafts, you can separate the two decisions completely: generate a season in one sitting when you have the time, then activate listings on whatever cadence you want to publish on. The generation schedule and the publishing schedule do not have to be the same schedule.

Related