Pirate Ship automation · runs daily
Buy Pirate Ship shipping labels in bulk
Orders pile up in three places: the Import grid, a wholesale sheet a buyer emailed, and a few DMs. Before every shipping run you sort them by box, upload or select them in Pirate Ship, and repeat the Get Rates and Buy Labels screens once per package type.
Cotlet does it in your own Pirate Ship account with list_import_orders, list_saved_packages, create_batch, get_batch_rates, get_account_balance and buy_batch, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Official options
Can Pirate Ship do this on its own?
Pirate Ship has no API for creating or buying batches (checked 12 Oct 2026). Batches come only from a spreadsheet upload or from the Import grid of its 13 store integrations, and both need you on the screen to map columns, choose the package and press Buy Labels. Orders that live in an email, a shared sheet or a marketplace without an integration still have to become a spreadsheet first.
By hand
How you do it in Pirate Ship today
- On the Ship page, choose Import from Integrations for store orders, or drag a CSV, XLS, XLSX or ODS file into the spreadsheet upload for everything else.
- The first time a new sheet layout is uploaded, Pirate Ship asks you to map each column (Name, Address, City, State, Zip, and Weight, Length, Width, Height as Override fields).
- On the package screen, pick a Saved Package from the Package Details drop-down or type Default weight and dimensions for rows that have none.
- Click Get Rates, choose a service, then the green Buy Labels button, and Print Labels on the page that follows.
- Pirate Ship cannot mix package types, Extra Services or customs options inside one spreadsheet, so envelopes and boxes need separate uploads. Addresses that fail come back as a new spreadsheet to fix and upload again, and that loop is where orders get dropped.
With an agent
How to buy Pirate Ship shipping labels in bulk
Prompt
Take the wholesale orders in wholesale.csv plus my unshipped Shopify orders, split them by box, show me the USPS Ground Advantage totals and buy the labels once I say OK. - 01
Gather every open order in one list
The agent reads the file or message you point it to and calls list_import_orders with refresh on, so orders paid in the last few minutes are included. An order that appears in both places, for example a Shopify order a wholesale buyer also emailed about, is kept once and named in the report.
- 02
Assign a box to each order
Pirate Ship needs one package type per batch, so the agent sorts orders into groups by your Saved Packages from list_saved_packages, using the item or weight rules you gave it. An order that fits no saved box is held back and listed for you instead of being forced into the wrong size.
- 03
Build one batch per group, buying nothing yet
Each group becomes its own create_batch call with the matching saved package and the order number in the Rubber Stamp, so a packer can match label to parcel. Rows missing a street, city, state or ZIP are left out at this point, not guessed.
- 04
Check prices and money before the purchase
get_batch_rates returns the total per service. The agent picks the service you asked for, shows any address problems it found, and compares the sum of all batches with get_account_balance so you know how much will go on your card.
- 05
Buy with your OK, then hand over the labels
After you confirm, buy_batch runs once per batch. The agent returns one print link per batch and the tracking numbers by order, and leaves store orders alone afterwards because Pirate Ship writes tracking back to Shopify or eBay itself.
What you get back
Example data
23 open orders: 17 from Shopify, 6 from wholesale.csv (order #1052 was in both, counted once).
Small box batch b_7Q4K2M: 14 labels, USPS Ground Advantage, $101.36.
Poly mailer batch b_7Q4K2N: 7 labels, USPS Ground Advantage, $38.15.
Held back: #1049 (no ZIP in the sheet), #1055 (36 lb, no saved box fits).
Account Balance $40.00 used first, $99.51 charged to your card.
Print links: 2 PDFs. Shopify orders now show as Fulfilled with tracking. Other ways to ask
- Every weekday at 2 PM, batch whatever is unshipped in the Import grid, but only eBay and Shopify orders, and wait for my OK before buying.
- Here is the list from Dana's email with 40 addresses for the event mailers. Use my Insured mailer package and print the order ID on each label.
- Make the batches for tonight's orders and show me USPS and UPS totals side by side, but do not buy anything.
- Ship all eBay orders under 1 lb in the poly mailer with Ground Advantage, and put the heavier ones in a separate batch I can check first.
Before you automate it
What Pirate Ship allows, and what to know first
- Pirate Ship spreadsheet uploads accept CSV, ODS, XLS and XLSX files with a header row, and each part of the address has to sit in its own column.
- Insurance cannot be set in a Pirate Ship spreadsheet column. The help center workaround is a Saved Package that already carries insurance, picked in the Package Details drop-down.
- Pirate Ship's Override feature imports order weights only from BigCommerce, Cratejoy, Ecwid, Etsy, PayPal, Shopify and WooCommerce, and only when every package in the batch shares dimensions and packaging type.
- After a spreadsheet batch, the Get Rates screen in Pirate Ship shows an average price rather than each label's price; the Shipment Details section is where to confirm the sheet's own weights were used.
- On USPS labels Pirate Ship prints up to four Rubber Stamp lines of 25 characters each, UPS allows two lines of 35, and UPS Ground Saver labels take none.
buy_batch asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.
Sources: How do I upload address spreadsheets into Pirate Ship? · How do I upload a spreadsheet with different weights and dimensions? · How to import from integrations · What are Rubber Stamps and how do I use them? · How do I correct address errors on my spreadsheet upload?
REST
Call create_batch from a script
curl
curl https://cotlet.dev/api/v1/pirate-ship/create_batch \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"order_ids":["o_4412","o_4413","o_4415"],"saved_package_id":"pkg_small_box","rubber_stamp":["order_id"]}' Example response
{
"batch_id": "b_9X2LQ1",
"shipments": 3,
"rows_with_address_errors": 0,
"bought": false
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is pirate-ship_create_batch. Example data.
Schedule it in n8n, Make, Zapier or cronTools
Pirate Ship tools this automation uses
| Tool | Parameters |
|---|---|
| list_import_orders | source, refresh, limit |
| list_saved_packages | none |
| create_batch | rows, order_ids, package, saved_package_id, rubber_stamp |
| get_batch_rates | batch_id |
| get_account_balance | none |
| buy_batch | batch_id, service, ship_date |
Frequently asked questions
What happens to orders with a bad address?
Pirate Ship shows the error and offers a new spreadsheet with the failing rows to correct and upload again. Your agent lists those rows with what is missing and builds them into a later batch once you fix them.
Give your agent access to Pirate Ship.
Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with Pirate Ship.