Stop paying $30–$50 every month just to copy your orders into a spreadsheet.
OrderCarry runs inside your own WordPress site. When an order reaches the status you choose, it sends the details to Google Sheets, to any webhook URL, or as a custom email — automatically, in the background, without slowing down checkout.
No task limits. No credits. No cloud account. No connection that expires.
Watch OrderCarry in action
Start with a short tour of the dashboard, then open the guide for the feature you need.
https://www.youtube.com/watch?v=TW3Qgho9MMQ
More guides on the
OrderCarry YouTube channel.
Why people switch
- Automation tools charge per task. This one does not count.
- Runs on your own server, so nothing disconnects and no token expires.
- Google Sheets setup takes about 60 seconds — no Google Cloud Console, no service account, no API keys.
- Smart Retry — if Google or your server hiccups, it tries again automatically. Configuration mistakes are reported instead of retried forever.
- One click Send Test Order, so you know it works before a real customer buys.
- Everything is logged in WooCommerce's own log viewer.
What it does
- Google Sheets — one row per order, created automatically, with headers. Google Sheets is a trademark of Google LLC; this plugin is not affiliated with or endorsed by Google.
- Webhook — the full order as JSON, signed with an
X-Ordsync-Signature header. Works with Make, n8n, Zapier, Airtable, or your own backend.
- Custom email — your own subject and message, with
{order_number}, {customer_name}, {items}, {total} and more.
- Order Automations — tell somebody when an order gets stuck. A status starts a clock; when it runs out the order is checked again, and if nothing has changed it goes out. Failed payments, orders nobody has shipped, refunds.
- Download — your orders as a spreadsheet file, straight away, with nothing to connect. The columns are the same ones the Google Sheets destination writes, so a file and a sheet always agree.
Built to not break your checkout
Every automation runs in the background through Action Scheduler, the same queue WooCommerce uses itself. Your customer never waits for Google to answer.
Works with your setup
- WooCommerce HPOS (High-Performance Order Storage)
- The block-based checkout
- Multisite
- PHP 7.4 through 8.3
Free vs Pro
The free version is not a demo. It sends unlimited orders to as many Google Sheets, webhooks and email addresses as you like, with full retry and logging — reliability is never the paid part.
OrderCarry Pro is a separate download and adds:
- PDF invoices — generated per order and attached to the email.
- Conditional rules — "only orders over €100", "only this shipping country", "only this payment method".
- Bulk import — push your existing orders into a sheet: the last 50, a date range, or every order you have ever taken. It runs in the background at a steady pace and can be stopped at any time.
- Your own columns — rename the headings into your own language, put them in the order you want, and leave out the ones you never look at.
- Your own custom fields — a gift message, a VAT number, a delivery slot. It reads the order itself, so it works whether the field came from ACF, Meta Box, JetEngine, a checkout plugin or your own code.
- Set an order's status from the sheet — change the Status column in Google Sheets and the order follows in WooCommerce, with the customer's usual email. Status only, and only the statuses you allow.
Pro comes with a 14-day free trial, no credit card required.
This guide assumes you have never done any of this before. Every step says
exactly what to click.
Before you start
- WooCommerce must already be installed and active.
- WordPress 6.4 or newer, PHP 7.4 or newer.
- For Google Sheets you need a normal Google account. You do not need a
Google Cloud account, a credit card, or an API key.
Step 1: Install the plugin
From your WordPress admin:
- Go to Plugins → Add Plugin.
- Search for OrderCarry.
- Click Install Now, then Activate.
If you downloaded a ZIP file instead:
- Go to Plugins → Add Plugin → Upload Plugin.
- Choose the ZIP file, click Install Now, then Activate.
Step 2: Open the settings
Go to
WooCommerce → OrderCarry in the left menu.
You will see these tabs:
- Dashboard — the first thing you see. Every destination in one place,
whether each one is working, and a one-click CSV of your orders. There is
nothing to set up here; it just reports on what the other tabs do.
- Google Sheets — one row per order in a spreadsheet.
- Webhook — the full order as JSON, for Make, n8n, Zapier, or your own system.
- Custom Email — your own email, to yourself or to the customer.
- Order Automations — watches for an order stuck in a status (a payment
that never cleared, an order nobody shipped) and tells you, without needing
a destination of its own — it reuses whichever ones you have already set up.
- Logs — what was sent, and what failed.
- Free vs Pro — a plain table of what is in each, so you never have to
guess whether something you want is behind a paywall. This is where you
will find PDF Invoice: a real invoice with your logo, generated and
attached to the order email automatically. It needs a Pro licence, which is
why it has no tab of its own in the free version — the table explains it
and links to upgrading.
You can use one destination tab, or all of them. Set up whichever you need.
Each one works on its own, and none of them depend on each other.
Step 3: Send orders to Google Sheets
First, create the sheet and its script.
- In the Google Sheets tab, click Where do I get this URL?. The
instructions open up, with a script already prepared for you.
- Click Create a blank Google Sheet. A new spreadsheet opens in Google.
(If you already have a sheet you want to use, open that one instead.)
- In that Google sheet, click Extensions in the top menu, then
Apps Script. A code editor opens in a new tab.
- Delete everything you see in that editor. It usually contains a few lines
like
function myFunction() {}. Remove all of it.
- Go back to the OrderCarry tab in WordPress and click Copy script.
- Go back to the Apps Script editor and paste (Ctrl+V, or Cmd+V on a Mac).
- Click the save icon (the floppy disk), or press Ctrl+S.
Now publish the script so your shop can reach it.
- In the Apps Script editor, click the blue Deploy button (top right),
then New deployment.
- Click the gear icon next to "Select type" and choose Web app.
- Set Execute as to Me.
- Set Who has access to Anyone. This sounds unsafe, but it is not:
the script only accepts requests that carry your secret, which is already
inside the script you pasted.
- Click Deploy. Google will ask you to authorise the script the first
time. Click through the permission screens. If you see a warning that the
app is not verified, click Advanced, then Go to (your project).
It is your own script — you are trusting yourself.
- Google now shows a Web app URL that ends in
/exec. Copy it.
Finally, tell the plugin about it.
- Back in WordPress, paste that URL into Google Sheet web app URL.
- Switch the toggle to ON.
- Choose when orders should be sent under
Send orders when they become (see the explanation further down).
- Click Save changes.
- Click Send test order.
Within a few seconds a test row should appear in your Google sheet, and the
plugin should show a green success message. The column headers are created
automatically the first time.
Once you are happy it works, open
Empty this sheet on the card and click
Delete every row. That clears out the test rows and leaves the headings,
so the sheet starts clean when your first real order arrives. Your orders in
WooCommerce are not touched.
Step 4: Send orders to a webhook
Use this if you want the order data in Make, n8n, Zapier, Airtable, an ERP, or
your own application.
- Open the Webhook tab.
- Paste the address that should receive the orders into URL. It must
start with
https://.
- Switch the toggle to ON.
- Choose when orders should be sent under Send orders when they become.
- Click Save changes, then Send test order.
Your receiving system should get a JSON message containing the order.
Every request also carries a header called
X-Ordsync-Signature. This is
proof that the request really came from your shop and not from someone else.
If the system on the other end supports it, use that header to verify the
request. You will find the signing key under
Advanced → Verifying that a
request really came from your shop.
If you just want to try it out first, create a free test address at
webhook.site, paste it in, and press
Send test order. You will see the
order arrive.
Step 5: Send an email for every order
- Open the Custom Email tab.
- In Send to, type the email address that should receive the message.
Type the single word
customer instead if you want it sent to the buyer.
- Write the Subject.
- Write the Message.
- Switch the toggle to ON, click Save changes, then
Send test order.
In the subject and the message you can use variables. They are replaced with
the real values of each order:
{order_number} {status} {date} {customer_name} {customer_email}
{customer_phone} {items} {total} {currency} {store_name}
{coupons} {shipping_method} {transaction_id} {order_note}
For example, a subject of
New order {order_number} - {total} arrives as
"New order 1042 - 59.90".
The full list is always shown under the message box, so you do not have to
remember it.
Step 6: Get told about an order that is stuck
This is free, and it does not need a destination of its own — it reuses the
sheet, webhook or email you already set up in the steps above.
- Open the Order Automations tab.
- Under Choose the order status, pick When an order becomes — for
example Failed, for a payment nobody chased.
- Under Choose how long to wait, pick Wait for — for example
30 minutes. The clock starts the moment the order reaches that status.
- Leave Only continue if it is still in this status ticked. This is the
re-check: when the wait is over, OrderCarry looks at the order again, and
only tells you if it is still in that status. Untick it only for
something that will never fix itself, such as a refund.
- Under Choose where to send the order, tick one or more of your
existing destinations — the sheet, webhook or email you already
configured.
- Switch the toggle at the top to ON, then click Save automations.
The panel on the right shows exactly what will happen, in order, using the
settings you just chose — use it to check the wait time and destinations
before saving.
One automation is free. A common second one:
Processing, wait 24 hours,
re-check on, so you hear about any order that has sat unshipped for a day.
Step 7: Generate PDF invoices (Pro)
This needs a Pro licence. The free version does not show a PDF Invoice tab at
all — see it on the
Free vs Pro tab first. Once you have a licence, a
PDF Invoice tab appears in the tab bar, and the steps below apply to it.
- Open the PDF Invoice tab.
- Under Choose who receives the invoice, type an address, or the word
customer to send it to the buyer.
- Under Customize your invoice, choose a Logo from your Media
Library, and fill in the Invoice heading (for example RECHNUNG for a
German shop), your Tax or VAT number, and a Footer line for
payment terms or a returns note.
- Under Choose when to create the invoice, pick the status that should
trigger it, the same as the other destinations.
- Switch the toggle to ON, click Save changes, then
Send test order. Use Preview invoice first if you just want to see
how it looks without sending anything.
The invoice is attached to the order confirmation email automatically — there
is nothing else to connect.
Understanding "Send orders when they become"
This decides
when an order is sent. It is the setting people get wrong
most often.
- Processing — the usual choice. The order is sent once the customer has
paid.
- Completed — sent when you mark the order as finished.
- Any status — sent as soon as the order is created, whatever happens
next.
Important: if you take
bank transfer, invoice, or cash on delivery, those
orders often never become "Processing". They go from pending straight to
on-hold or completed. If you choose Processing, those orders are never sent
and you will think the plugin is broken. Choose
Any status instead.
Each destination has its own setting. Your sheet can use Processing while your
webhook uses Any status.
Step 8: Let the sheet set an order's status (Pro)
This needs a Pro licence. It lets somebody change an order's status in the
Google Sheet — for example from Processing to Completed — and the order
follows in WooCommerce a few minutes later. WooCommerce sends the customer its
usual email, exactly as if you had changed the status yourself.
- If your sheet was set up before version 1.2.0, paste the script again:
open the Google Sheets tab, click Where do I get this URL?, copy
the script into your sheet's Apps Script editor, then click
Deploy → Manage deployments, edit the deployment and choose
New version. Do this for every sheet you use.
- On the Google Sheets tab, on the right, open
Let the sheet set an order's status.
- Tick the statuses the sheet is allowed to set. Only Processing and
Completed are ticked at first; Refunded and Cancelled stay off
unless you tick them.
- Choose How often to check the sheet.
- Tick Turn this on, then click Save write-back.
Now change a status in the Status column. A change only counts once it has
stayed the same for two checks, so there is time to fix a mistake. The result
appears in a column called
OrderCarry next to the row, and a note is
added to the order.
Step 9: Check that it is working
Place a real test order in your shop, or change an existing order to the
status you selected.
Then open the
Logs tab. You will see each attempt, whether it succeeded,
and the error message if it failed.
The coloured label at the top right of each destination also tells you the
state at a glance:
- Sent ... ago — real orders are arriving. This is what you want.
- Test passed — no orders yet — the connection works, but no real order
has been sent yet.
- Last attempt failed — something is wrong. Hover over it to see why.
- Nothing sent yet — not used yet.
If something does not work
Nothing arrives at all. Check the trigger status first, as described
above. Bank transfer orders and Processing are the most common cause.
The Google sheet stays empty. Make sure you set "Who has access" to
Anyone when deploying. If you changed the script afterwards, you must
deploy again:
Deploy → Manage deployments → edit → New version. A URL that
ends in
/dev will not work; it must end in
/exec.
Emails do not arrive. This is almost never the plugin. WordPress itself
often cannot send email on cheap hosting. Install any SMTP plugin, configure
it, and try again.
The row appears a minute later, not instantly. That is normal and
deliberate. Orders are sent in the background so your checkout is never slowed
down or blocked by a slow connection.
You want to see what is queued. Open
Advanced → View the queue.