{"id":357309,"date":"2026-08-30T19:10:17","date_gmt":"2026-08-30T19:10:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/order-sync-sheets-webhooks\/"},"modified":"2026-10-11T17:17:43","modified_gmt":"2026-10-11T17:17:43","slug":"ordercarry-order-automation-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ja.wordpress.org\/plugins\/ordercarry-order-automation-for-woocommerce\/","author":23552503,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.3","stable_tag":"1.2.3","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"OrderCarry - Order Automation, Google Sheets & Automated Emails for WooCommerce","header_author":"OrderCarry","header_description":"Send every WooCommerce order to Google Sheets, a webhook or a custom email. Unlimited orders, no monthly fees, no task limits.","assets_banners_color":"4b73ae","last_updated":"2026-10-11 17:17:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ordercarry.com","header_author_uri":"https:\/\/ordercarry.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":558,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"houssemremili","date":"2026-08-30 21:54:18","revision":3673169},"1.1.0":{"tag":"1.1.0","author":"houssemremili","date":"2026-09-09 04:07:03","revision":3687556},"1.1.1":{"tag":"1.1.1","author":"houssemremili","date":"2026-09-14 20:55:58","revision":3695920},"1.1.2":{"tag":"1.1.2","author":"houssemremili","date":"2026-09-22 21:08:31","revision":3708113},"1.2.0":{"tag":"1.2.0","author":"houssemremili","date":"2026-09-26 18:45:26","revision":3714631},"1.2.1":{"tag":"1.2.1","author":"houssemremili","date":"2026-09-29 11:36:35","revision":3718921},"1.2.2":{"tag":"1.2.2","author":"houssemremili","date":"2026-10-02 14:48:45","revision":3725002},"1.2.3":{"tag":"1.2.3","author":"houssemremili","date":"2026-10-11 17:17:43","revision":3739856}},"upgrade_notice":{"1.2.3":"<p>New name and author, webhooks now carry a timestamped signature and a delivery ID, and Pro filters stay on the destination they belong to. Pro: if a tab has two or more destinations with filters, check them once after updating.<\/p>","1.2.2":"<p>A destination can now receive only what Order Automations send it, plus clearer Google Sheets messages when Google loses a script&#039;s answer. Nothing to do after updating; no need to paste the script again.<\/p>","1.2.1":"<p>Fixes for setting an order&#039;s status from the sheet (Pro). Nothing to do after updating; no need to paste the script again.<\/p>","1.2.0":"<p>Pro can now set an order&#039;s status from the Google Sheet. If you use Google Sheets, paste the script into Apps Script again and redeploy \u2014 orders keep arriving either way, but the new feature needs it.<\/p>","1.1.1":"<p>Housekeeping: a working plugin homepage link, a proper support address, and example text in three fields. Nothing to do after updating.<\/p>","1.1.0":"<p>Adds a spreadsheet download, a Dashboard, and a button to empty a sheet. If you use Google Sheets, paste the script into Apps Script again and redeploy \u2014 orders keep arriving either way, but the new button needs it.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3673122,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3673122,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3739855,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3739855,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.1.0","1.1.1","1.1.2","1.2.0","1.2.1","1.2.2","1.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3687555,"resolution":"1","location":"assets","locale":"","width":1479,"height":852},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3708112,"resolution":"2","location":"assets","locale":"","width":1945,"height":1372},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3708112,"resolution":"3","location":"assets","locale":"","width":1875,"height":1414},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3708112,"resolution":"4","location":"assets","locale":"","width":1780,"height":1408},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3708112,"resolution":"5","location":"assets","locale":"","width":1884,"height":1405},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3708112,"resolution":"6","location":"assets","locale":"","width":1554,"height":1408},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3714630,"resolution":"7","location":"assets","locale":"","width":794,"height":910}},"screenshots":{"1":"The dashboard \u2014 every destination, whether each one is working, and a one-click CSV of your orders.","2":"Google Sheets \u2014 paste one script URL, and see the rows exactly as they will land in your sheet.","3":"Webhook \u2014 the real JSON your endpoint receives, with the headers it is sent with.","4":"Custom email \u2014 write the message once, with the order's own details filled in, and see it before it sends.","5":"Order automations \u2014 watch for an order stuck in a status, wait, check again, then tell whoever you choose.","6":"PDF invoice \u2014 your logo, your heading and your tax number, previewed as the customer will receive it.","7":"Let the sheet set an order's status (Pro) \u2014 choose which statuses the sheet may set and how often it is checked."}},"plugin_section":[],"plugin_tags":[41888,25296,154364,7709,15439],"plugin_category":[45],"plugin_contributors":[78154,278386],"plugin_business_model":[],"class_list":["post-357309","plugin","type-plugin","status-publish","hentry","plugin_tags-email-automation","plugin_tags-google-sheets","plugin_tags-order-export","plugin_tags-order-notification","plugin_tags-webhook","plugin_category-ecommerce","plugin_contributors-freemius","plugin_contributors-houssemremili","plugin_committers-houssemremili"],"banners":{"banner":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/banner-772x250.png?rev=3739855","banner_2x":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/banner-1544x500.png?rev=3739855","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/icon-128x128.png?rev=3673122","icon_2x":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/icon-256x256.png?rev=3673122","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-1.png?rev=3687555","caption":"The dashboard \u2014 every destination, whether each one is working, and a one-click CSV of your orders."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-2.png?rev=3708112","caption":"Google Sheets \u2014 paste one script URL, and see the rows exactly as they will land in your sheet."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-3.png?rev=3708112","caption":"Webhook \u2014 the real JSON your endpoint receives, with the headers it is sent with."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-4.png?rev=3708112","caption":"Custom email \u2014 write the message once, with the order's own details filled in, and see it before it sends."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-5.png?rev=3708112","caption":"Order automations \u2014 watch for an order stuck in a status, wait, check again, then tell whoever you choose."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-6.png?rev=3708112","caption":"PDF invoice \u2014 your logo, your heading and your tax number, previewed as the customer will receive it."},{"src":"https:\/\/ps.w.org\/ordercarry-order-automation-for-woocommerce\/assets\/screenshot-7.png?rev=3714630","caption":"Let the sheet set an order's status (Pro) \u2014 choose which statuses the sheet may set and how often it is checked."}],"raw_content":"<!--section=description-->\n<p><strong>OrderCarry automates what happens after every WooCommerce order.<\/strong> When an order reaches the status you choose, it can:<\/p>\n\n<ul>\n<li><strong>Add a row to Google Sheets<\/strong> \u2014 a live order sheet for your team, with no API keys.<\/li>\n<li><strong>Send the order to a webhook<\/strong> \u2014 Zapier, Make, n8n, your ERP, CRM or warehouse system.<\/li>\n<li><strong>Send an automatic email<\/strong> \u2014 a WooCommerce order notification to your team, your supplier or the customer, written your way.<\/li>\n<li><strong>Alert you when an order gets stuck<\/strong> \u2014 still unpaid, still not shipped, or refunded \u2014 by email, sheet or webhook.<\/li>\n<li><strong>Export your orders<\/strong> \u2014 a spreadsheet file of your orders, straight away.<\/li>\n<\/ul>\n\n<p>Stop paying $30\u2013$50 every month to an automation tool just to move your orders around. OrderCarry runs inside your own WordPress site, in the background, without slowing down checkout.<\/p>\n\n<p><strong>No task limits. No credits. No cloud account. No connection that expires.<\/strong><\/p>\n\n<h4>Watch OrderCarry in action<\/h4>\n\n<p>Start with a short tour of the dashboard, then open the guide for the feature you need.<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=TW3Qgho9MMQ<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=y0FuCU3XxMw\">Connect Google Sheets step by step<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=fSurDDQYEr0\">Google Sheets full tour, including Pro options<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=UOWK-1msi74\">Send orders to a webhook (conditional rules shown are Pro)<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=1pc0VwimoXs\">Write custom order emails<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=5-WoPmy1A_E\">Set up order automations (one is free, up to twenty in Pro)<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=QRzh1ig7Z9g\">Create PDF invoices (Pro)<\/a><\/li>\n<\/ul>\n\n<p>More guides on the <a href=\"https:\/\/www.youtube.com\/@ordercarry\">OrderCarry YouTube channel<\/a>.<\/p>\n\n<h4>Why people switch<\/h4>\n\n<ul>\n<li>Automation tools charge per task. This one does not count.<\/li>\n<li>Runs on your own server, so nothing disconnects and no token expires.<\/li>\n<li>Google Sheets setup takes about 60 seconds \u2014 no Google Cloud Console, no service account, no API keys.<\/li>\n<li>Smart Retry \u2014 if Google or your server hiccups, it tries again automatically. Configuration mistakes are reported instead of retried forever.<\/li>\n<li>One click <strong>Send Test Order<\/strong>, so you know it works before a real customer buys.<\/li>\n<li>Everything is logged in WooCommerce's own log viewer.<\/li>\n<\/ul>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Google Sheets<\/strong> \u2014 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.<\/li>\n<li><strong>Webhook<\/strong> \u2014 the full order as JSON, signed with an <code>X-Ordsync-Signature<\/code> header. Works with Make, n8n, Zapier, Airtable, or your own backend.<\/li>\n<li><strong>Automatic emails<\/strong> (the Custom Email tab) \u2014 your own subject and message, with <code>{order_number}<\/code>, <code>{customer_name}<\/code>, <code>{items}<\/code>, <code>{total}<\/code> and more. Send them to yourself, a team address or the customer.<\/li>\n<li><strong>Order Automations<\/strong> \u2014 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. Set a destination to \"Only when an Order Automation sends it\" and it receives the alerts and nothing else.<\/li>\n<li><strong>Download<\/strong> \u2014 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.<\/li>\n<\/ul>\n\n<h4>Built to not break your checkout<\/h4>\n\n<p>Every automation runs in the background through Action Scheduler, the same queue WooCommerce uses itself. Your customer never waits for Google to answer.<\/p>\n\n<h4>Works with your setup<\/h4>\n\n<ul>\n<li>WooCommerce HPOS (High-Performance Order Storage)<\/li>\n<li>The block-based checkout<\/li>\n<li>Multisite<\/li>\n<li>PHP 7.4 through 8.3<\/li>\n<\/ul>\n\n<h4>Free vs Pro<\/h4>\n\n<p>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 \u2014 reliability is never the paid part.<\/p>\n\n<p>OrderCarry Pro is a separate download and adds:<\/p>\n\n<ul>\n<li><strong>PDF invoices<\/strong> \u2014 generated per order and attached to the email.<\/li>\n<li><strong>Conditional rules<\/strong> \u2014 \"only orders over \u20ac100\", \"only this shipping country\", \"only this payment method\".<\/li>\n<li><strong>Bulk import<\/strong> \u2014 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.<\/li>\n<li><strong>Your own columns<\/strong> \u2014 rename the headings into your own language, put them in the order you want, and leave out the ones you never look at.<\/li>\n<li><strong>Your own custom fields<\/strong> \u2014 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.<\/li>\n<li><strong>Set an order's status from the sheet<\/strong> \u2014 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.<\/li>\n<\/ul>\n\n<p>Pro comes with a 14-day free trial, no credit card required.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends order data to services <strong>you configure yourself<\/strong>. Nothing is sent anywhere until you enable a destination and enter a URL.<\/p>\n\n<ul>\n<li><p><strong>Google Apps Script<\/strong> \u2014 if you enable the Google Sheets destination, order data (order number, date, status, customer name, email, phone, billing and shipping address, items, totals, payment method, customer note, and any custom fields you have chosen on the Columns tab) is sent to the web app URL you provide, inside your own Google account. Sent once per order when that order reaches your chosen status, and when you click Send Test Order. Clicking Delete every row sends one more request to the same URL, which carries no order data at all \u2014 only the instruction to empty the sheet. An automation sends the order the same way, at the time it decides rather than when the order arrives. Google's terms: https:\/\/policies.google.com\/terms \u2014 Google's privacy policy: https:\/\/policies.google.com\/privacy<\/p><\/li>\n<li><p><strong>Your own webhook URL<\/strong> \u2014 if you enable the webhook destination, the same order data is sent as JSON to the address you enter, plus any custom fields you have chosen on the Columns tab. You choose the recipient, so the applicable terms are that service's own.<\/p><\/li>\n<li><p><strong>Freemius<\/strong> \u2014 the plugin uses the Freemius SDK for licensing, updates and (optionally) usage tracking. In the free version nothing is sent until you click \"Allow &amp; Continue\" on the opt-in screen; choosing \"Skip\" leaves the plugin fully functional and silent. If you opt in, or if you buy a licence, your site URL, WordPress and PHP version, and your email address are sent to Freemius to activate and validate the licence. Freemius terms: https:\/\/freemius.com\/terms\/ \u2014 Freemius privacy policy: https:\/\/freemius.com\/privacy\/<\/p><\/li>\n<li><p><strong>The plugin author<\/strong> \u2014 only when you write to us from the <strong>Support<\/strong> tab and press Send. Your message, the reply address you type, any file you attach, and (unless you untick the box) a short technical report are emailed from your own website to the developer. The report lists version numbers, which destinations are switched on and their current state, and the last 10 lines of the activity log. Your sheet and webhook addresses, your secrets and any email addresses are removed from it before sending, and you can read the exact text on screen before you press Send.<\/p><\/li>\n<\/ul>\n\n<p>Nothing reaches the plugin author automatically. The only data that ever leaves your site for us is what you choose to send from the Support tab.<\/p>\n\n<!--section=installation-->\n<p>This guide assumes you have never done any of this before. Every step says\nexactly what to click.<\/p>\n\n<h4>Before you start<\/h4>\n\n<ul>\n<li>WooCommerce must already be installed and active.<\/li>\n<li>WordPress 6.4 or newer, PHP 7.4 or newer.<\/li>\n<li>For Google Sheets you need a normal Google account. You do <strong>not<\/strong> need a\nGoogle Cloud account, a credit card, or an API key.<\/li>\n<\/ul>\n\n<h4>Step 1: Install the plugin<\/h4>\n\n<p>From your WordPress admin:<\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add Plugin<\/strong>.<\/li>\n<li>Search for <strong>OrderCarry<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<p>If you downloaded a ZIP file instead:<\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add Plugin \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Choose the ZIP file, click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Step 2: Open the settings<\/h4>\n\n<p>Go to <strong>WooCommerce \u2192 OrderCarry<\/strong> in the left menu.<\/p>\n\n<p>You will see these tabs:<\/p>\n\n<ul>\n<li><strong>Dashboard<\/strong> \u2014 the first thing you see. Every destination in one place,\nwhether each one is working, and a one-click CSV of your orders. There is\nnothing to set up here; it just reports on what the other tabs do.<\/li>\n<li><strong>Google Sheets<\/strong> \u2014 one row per order in a spreadsheet.<\/li>\n<li><strong>Webhook<\/strong> \u2014 the full order as JSON, for Make, n8n, Zapier, or your own system.<\/li>\n<li><strong>Custom Email<\/strong> \u2014 your own email, to yourself or to the customer.<\/li>\n<li><strong>Order Automations<\/strong> \u2014 watches for an order stuck in a status (a payment\nthat never cleared, an order nobody shipped) and tells you, without needing\na destination of its own \u2014 it reuses whichever ones you have already set up.<\/li>\n<li><strong>Logs<\/strong> \u2014 what was sent, and what failed.<\/li>\n<li><strong>Free vs Pro<\/strong> \u2014 a plain table of what is in each, so you never have to\nguess whether something you want is behind a paywall. This is where you\nwill find <strong>PDF Invoice<\/strong>: a real invoice with your logo, generated and\nattached to the order email automatically. It needs a Pro licence, which is\nwhy it has no tab of its own in the free version \u2014 the table explains it\nand links to upgrading.<\/li>\n<\/ul>\n\n<p>You can use one destination tab, or all of them. Set up whichever you need.\nEach one works on its own, and none of them depend on each other.<\/p>\n\n<h4>Step 3: Send orders to Google Sheets<\/h4>\n\n<p><strong>First, create the sheet and its script.<\/strong><\/p>\n\n<ol>\n<li>In the <strong>Google Sheets<\/strong> tab, click <strong>Where do I get this URL?<\/strong>. The\ninstructions open up, with a script already prepared for you.<\/li>\n<li>Click <strong>Create a blank Google Sheet<\/strong>. A new spreadsheet opens in Google.\n(If you already have a sheet you want to use, open that one instead.)<\/li>\n<li>In that Google sheet, click <strong>Extensions<\/strong> in the top menu, then\n<strong>Apps Script<\/strong>. A code editor opens in a new tab.<\/li>\n<li>Delete everything you see in that editor. It usually contains a few lines\nlike <code>function myFunction() {}<\/code>. Remove all of it.<\/li>\n<li>Go back to the OrderCarry tab in WordPress and click <strong>Copy script<\/strong>.<\/li>\n<li>Go back to the Apps Script editor and paste (Ctrl+V, or Cmd+V on a Mac).<\/li>\n<li>Click the save icon (the floppy disk), or press Ctrl+S.<\/li>\n<\/ol>\n\n<p><strong>Now publish the script so your shop can reach it.<\/strong><\/p>\n\n<ol>\n<li>In the Apps Script editor, click the blue <strong>Deploy<\/strong> button (top right),\nthen <strong>New deployment<\/strong>.<\/li>\n<li>Click the gear icon next to \"Select type\" and choose <strong>Web app<\/strong>.<\/li>\n<li>Set <strong>Execute as<\/strong> to <strong>Me<\/strong>.<\/li>\n<li>Set <strong>Who has access<\/strong> to <strong>Anyone<\/strong>. This sounds unsafe, but it is not:\nthe script only accepts requests that carry your secret, which is already\ninside the script you pasted.<\/li>\n<li>Click <strong>Deploy<\/strong>. Google will ask you to authorise the script the first\ntime. Click through the permission screens. If you see a warning that the\napp is not verified, click <strong>Advanced<\/strong>, then <strong>Go to (your project)<\/strong>.\nIt is your own script \u2014 you are trusting yourself.<\/li>\n<li>Google now shows a <strong>Web app URL<\/strong> that ends in <code>\/exec<\/code>. Copy it.<\/li>\n<\/ol>\n\n<p><strong>Finally, tell the plugin about it.<\/strong><\/p>\n\n<ol>\n<li>Back in WordPress, paste that URL into <strong>Google Sheet web app URL<\/strong>.<\/li>\n<li>Switch the toggle to <strong>ON<\/strong>.<\/li>\n<li>Choose when orders should be sent under\n<strong>Send orders when they become<\/strong> (see the explanation further down).<\/li>\n<li>Click <strong>Save changes<\/strong>.<\/li>\n<li>Click <strong>Send test order<\/strong>.<\/li>\n<\/ol>\n\n<p>Within a few seconds a test row should appear in your Google sheet, and the\nplugin should show a green success message. The column headers are created\nautomatically the first time.<\/p>\n\n<p>Once you are happy it works, open <strong>Empty this sheet<\/strong> on the card and click\n<strong>Delete every row<\/strong>. That clears out the test rows and leaves the headings,\nso the sheet starts clean when your first real order arrives. Your orders in\nWooCommerce are not touched.<\/p>\n\n<h4>Step 4: Send orders to a webhook<\/h4>\n\n<p>Use this if you want the order data in Make, n8n, Zapier, Airtable, an ERP, or\nyour own application.<\/p>\n\n<ol>\n<li>Open the <strong>Webhook<\/strong> tab.<\/li>\n<li>Paste the address that should receive the orders into <strong>URL<\/strong>. It must\nstart with <code>https:\/\/<\/code>.<\/li>\n<li>Switch the toggle to <strong>ON<\/strong>.<\/li>\n<li>Choose when orders should be sent under <strong>Send orders when they become<\/strong>.<\/li>\n<li>Click <strong>Save changes<\/strong>, then <strong>Send test order<\/strong>.<\/li>\n<\/ol>\n\n<p>Your receiving system should get a JSON message containing the order.<\/p>\n\n<p>Every request also carries a header called <code>X-Ordsync-Signature<\/code>. This is\nproof that the request really came from your shop and not from someone else.\nIf the system on the other end supports it, use that header to verify the\nrequest. You will find the signing key under <strong>Advanced \u2192 Verifying that a\nrequest really came from your shop<\/strong>.<\/p>\n\n<p>If you just want to try it out first, create a free test address at\nwebhook.site, paste it in, and press <strong>Send test order<\/strong>. You will see the\norder arrive.<\/p>\n\n<h4>Step 5: Send an email for every order<\/h4>\n\n<ol>\n<li>Open the <strong>Custom Email<\/strong> tab.<\/li>\n<li>In <strong>Send to<\/strong>, type the email address that should receive the message.\nType the single word <code>customer<\/code> instead if you want it sent to the buyer.<\/li>\n<li>Write the <strong>Subject<\/strong>.<\/li>\n<li>Write the <strong>Message<\/strong>.<\/li>\n<li>Switch the toggle to <strong>ON<\/strong>, click <strong>Save changes<\/strong>, then\n<strong>Send test order<\/strong>.<\/li>\n<\/ol>\n\n<p>In the subject and the message you can use variables. They are replaced with\nthe real values of each order:<\/p>\n\n<pre><code>{order_number} `{status}` `{date}` `{customer_name}` `{customer_email}`\n{customer_phone} `{items}` `{total}` `{currency}` `{store_name}`\n{coupons} `{shipping_method}` `{transaction_id}` `{order_note}`\n<\/code><\/pre>\n\n<p>For example, a subject of <code>New order {order_number} - {total}<\/code> arrives as\n\"New order 1042 - 59.90\".<\/p>\n\n<p>The full list is always shown under the message box, so you do not have to\nremember it.<\/p>\n\n<h4>Step 6: Get told about an order that is stuck<\/h4>\n\n<p>This is free, and it does not need a destination of its own \u2014 it reuses the\nsheet, webhook or email you already set up in the steps above.<\/p>\n\n<ol>\n<li>Open the <strong>Order Automations<\/strong> tab.<\/li>\n<li>Under <strong>Choose the order status<\/strong>, pick <strong>When an order becomes<\/strong> \u2014 for\nexample <strong>Failed<\/strong>, for a payment nobody chased.<\/li>\n<li>Under <strong>Choose how long to wait<\/strong>, pick <strong>Wait for<\/strong> \u2014 for example\n<strong>30 minutes<\/strong>. The clock starts the moment the order reaches that status.<\/li>\n<li>Leave <strong>Only continue if it is still in this status<\/strong> ticked. This is the\nre-check: when the wait is over, OrderCarry looks at the order again, and\nonly tells you if it is <em>still<\/em> in that status. Untick it only for\nsomething that will never fix itself, such as a refund.<\/li>\n<li>Under <strong>Choose where to send the order<\/strong>, tick one or more of your\nexisting destinations \u2014 the sheet, webhook or email you already\nconfigured.<\/li>\n<li>Switch the toggle at the top to <strong>ON<\/strong>, then click <strong>Save automations<\/strong>.<\/li>\n<\/ol>\n\n<p>The panel on the right shows exactly what will happen, in order, using the\nsettings you just chose \u2014 use it to check the wait time and destinations\nbefore saving.<\/p>\n\n<p>One automation is free. A common second one: <strong>Processing<\/strong>, wait 24 hours,\nre-check on, so you hear about any order that has sat unshipped for a day.<\/p>\n\n<h4>Step 7: Generate PDF invoices (Pro)<\/h4>\n\n<p>This needs a Pro licence. The free version does not show a PDF Invoice tab at\nall \u2014 see it on the <strong>Free vs Pro<\/strong> tab first. Once you have a licence, a\n<strong>PDF Invoice<\/strong> tab appears in the tab bar, and the steps below apply to it.<\/p>\n\n<ol>\n<li>Open the <strong>PDF Invoice<\/strong> tab.<\/li>\n<li>Under <strong>Choose who receives the invoice<\/strong>, type an address, or the word\n   customer to send it to the buyer.<\/li>\n<li>Under <strong>Customize your invoice<\/strong>, choose a <strong>Logo<\/strong> from your Media\nLibrary, and fill in the <strong>Invoice heading<\/strong> (for example RECHNUNG for a\nGerman shop), your <strong>Tax or VAT number<\/strong>, and a <strong>Footer line<\/strong> for\npayment terms or a returns note.<\/li>\n<li>Under <strong>Choose when to create the invoice<\/strong>, pick the status that should\ntrigger it, the same as the other destinations.<\/li>\n<li>Switch the toggle to <strong>ON<\/strong>, click <strong>Save changes<\/strong>, then\n<strong>Send test order<\/strong>. Use <strong>Preview invoice<\/strong> first if you just want to see\nhow it looks without sending anything.<\/li>\n<\/ol>\n\n<p>The invoice is attached to the order confirmation email automatically \u2014 there\nis nothing else to connect.<\/p>\n\n<h4>Understanding \"Send orders when they become\"<\/h4>\n\n<p>This decides <strong>when<\/strong> an order is sent. It is the setting people get wrong\nmost often.<\/p>\n\n<ul>\n<li><strong>Processing<\/strong> \u2014 the usual choice. The order is sent once the customer has\npaid.<\/li>\n<li><strong>Completed<\/strong> \u2014 sent when you mark the order as finished.<\/li>\n<li><strong>Any status<\/strong> \u2014 sent as soon as the order is created, whatever happens\nnext.<\/li>\n<\/ul>\n\n<p>Important: if you take <strong>bank transfer, invoice, or cash on delivery<\/strong>, those\norders often never become \"Processing\". They go from pending straight to\non-hold or completed. If you choose Processing, those orders are never sent\nand you will think the plugin is broken. Choose <strong>Any status<\/strong> instead.<\/p>\n\n<p>Each destination has its own setting. Your sheet can use Processing while your\nwebhook uses Any status.<\/p>\n\n<h4>Step 8: Let the sheet set an order's status (Pro)<\/h4>\n\n<p>This needs a Pro licence. It lets somebody change an order's status in the\nGoogle Sheet \u2014 for example from Processing to Completed \u2014 and the order\nfollows in WooCommerce a few minutes later. WooCommerce sends the customer its\nusual email, exactly as if you had changed the status yourself.<\/p>\n\n<ol>\n<li>If your sheet was set up before version 1.2.0, <strong>paste the script again<\/strong>:\nopen the <strong>Google Sheets<\/strong> tab, click <strong>Where do I get this URL?<\/strong>, copy\nthe script into your sheet's Apps Script editor, then click\n<strong>Deploy \u2192 Manage deployments<\/strong>, edit the deployment and choose\n<strong>New version<\/strong>. Do this for every sheet you use.<\/li>\n<li>On the <strong>Google Sheets<\/strong> tab, on the right, open\n<strong>Let the sheet set an order's status<\/strong>.<\/li>\n<li>Tick the statuses the sheet is allowed to set. Only <strong>Processing<\/strong> and\n<strong>Completed<\/strong> are ticked at first; <strong>Refunded<\/strong> and <strong>Cancelled<\/strong> stay off\nunless you tick them.<\/li>\n<li>Choose <strong>How often to check the sheet<\/strong>.<\/li>\n<li>Tick <strong>Turn this on<\/strong>, then click <strong>Save write-back<\/strong>.<\/li>\n<\/ol>\n\n<p>Now change a status in the Status column. A change only counts once it has\nstayed the same for two checks, so there is time to fix a mistake. The result\nappears in a column called <strong>OrderCarry<\/strong> next to the row, and a note is\nadded to the order.<\/p>\n\n<h4>Step 9: Check that it is working<\/h4>\n\n<p>Place a real test order in your shop, or change an existing order to the\nstatus you selected.<\/p>\n\n<p>Then open the <strong>Logs<\/strong> tab. You will see each attempt, whether it succeeded,\nand the error message if it failed.<\/p>\n\n<p>The coloured label at the top right of each destination also tells you the\nstate at a glance:<\/p>\n\n<ul>\n<li><strong>Sent ... ago<\/strong> \u2014 real orders are arriving. This is what you want.<\/li>\n<li><strong>Test passed \u2014 no orders yet<\/strong> \u2014 the connection works, but no real order\nhas been sent yet.<\/li>\n<li><strong>Last attempt failed<\/strong> \u2014 something is wrong. Hover over it to see why.<\/li>\n<li><strong>Nothing sent yet<\/strong> \u2014 not used yet.<\/li>\n<\/ul>\n\n<h4>If something does not work<\/h4>\n\n<p><strong>Nothing arrives at all.<\/strong> Check the trigger status first, as described\nabove. Bank transfer orders and Processing are the most common cause.<\/p>\n\n<p><strong>The Google sheet stays empty.<\/strong> Make sure you set \"Who has access\" to\n<strong>Anyone<\/strong> when deploying. If you changed the script afterwards, you must\ndeploy again: <strong>Deploy \u2192 Manage deployments \u2192 edit \u2192 New version<\/strong>. A URL that\nends in <code>\/dev<\/code> will not work; it must end in <code>\/exec<\/code>.<\/p>\n\n<p><strong>Emails do not arrive.<\/strong> This is almost never the plugin. WordPress itself\noften cannot send email on cheap hosting. Install any SMTP plugin, configure\nit, and try again.<\/p>\n\n<p><strong>The row appears a minute later, not instantly.<\/strong> That is normal and\ndeliberate. Orders are sent in the background so your checkout is never slowed\ndown or blocked by a slow connection.<\/p>\n\n<p><strong>You want to see what is queued.<\/strong> Open <strong>Advanced \u2192 View the queue<\/strong>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20my%20staff%20change%20order%20statuses%20from%20the%20sheet%3F\"><h3>Can my staff change order statuses from the sheet?<\/h3><\/dt>\n<dd><p>Yes, with Pro. Set the status in the sheet and OrderCarry updates the order in WooCommerce \u2014 which means WooCommerce sends its normal email to your customer, exactly as if you had changed it yourself.<\/p>\n\n<p>You decide which statuses staff are allowed to set; Refunded and Cancelled are off until you switch them on. A change has to stay the same for two checks before it counts, no more than 20 orders change in one check, and every change is written on the order as a note.<\/p>\n\n<p>It is status only. Addresses, prices and products cannot be edited from the sheet.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20google%20cloud%20account%3F\"><h3>Do I need a Google Cloud account?<\/h3><\/dt>\n<dd><p>No. You paste a short script into your own Google Sheet and deploy it as a web app. That takes about a minute and costs nothing.<\/p><\/dd>\n<dt id=\"is%20there%20a%20limit%20on%20how%20many%20orders%20it%20can%20send%3F\"><h3>Is there a limit on how many orders it can send?<\/h3><\/dt>\n<dd><p>No. It runs on your server, so there is nothing to meter.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20checkout%3F\"><h3>Will it slow down my checkout?<\/h3><\/dt>\n<dd><p>No. Orders are queued and sent in the background through Action Scheduler.<\/p><\/dd>\n<dt id=\"how%20long%20until%20the%20row%20appears%3F\"><h3>How long until the row appears?<\/h3><\/dt>\n<dd><p>Usually a minute or two, sometimes longer on a very quiet store.<\/p>\n\n<p>WordPress only runs background jobs when someone visits the site, so a busy shop syncs almost straight away while a shop with no visitors waits until the next visit. Nothing is ever lost \u2014 the order stays in the queue until it runs, and you can watch it under <strong>WooCommerce \u2192 Status \u2192 Scheduled Actions<\/strong>.<\/p>\n\n<p>The <strong>Send Test Order<\/strong> button skips the queue and fires immediately, which is why it feels instant.<\/p>\n\n<p>If you need every order synced within seconds regardless of traffic, ask your host to enable a real system cron and disable WP-Cron.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20columns%20in%20my%20sheet%3F\"><h3>Can I change the columns in my sheet?<\/h3><\/dt>\n<dd><p>The free version writes the same twelve columns to every sheet and to the download, in the same order, so the two always agree. Pro lets you rename the headings into your own language, reorder them and leave out the ones you never look at.<\/p>\n\n<p>Renaming is safe at any time. Reordering or removing a column in a sheet that already has rows in it is not: the headings are rewritten in place and the rows underneath stay where they are, so empty the sheet first.<\/p><\/dd>\n<dt id=\"is%20there%20a%20video%20tutorial%3F\"><h3>Is there a video tutorial?<\/h3><\/dt>\n<dd><p>Yes. The \"Watch OrderCarry in action\" section at the top of this page has a dashboard tour and a short guide for each tab: Google Sheets, webhook, custom email, order automations and PDF invoices.<\/p><\/dd>\n<dt id=\"can%20it%20tell%20me%20when%20an%20order%20is%20stuck%3F\"><h3>Can it tell me when an order is stuck?<\/h3><\/dt>\n<dd><p>Yes, and it is free. Open the <strong>Order Automations<\/strong> tab and set up a rule: when an order becomes Processing, wait 24 hours, then look again \u2014 if it is still Processing, send it to whichever destination you like.<\/p>\n\n<p>The second look is the important part. Without it you would be told about every order that reached Processing yesterday, including the ones that shipped this morning.<\/p>\n\n<p>An automation sends to a destination you already set up, and that destination keeps sending its own orders too. To hear only about stuck orders, set up a destination just for them and set its \"Send orders when they become\" to <strong>Only when an Order Automation sends it<\/strong>.<\/p>\n\n<p>The same rule chases failed payments (Failed, wait 30 minutes, still Failed) and flags refunds to your accountant. One automation is free; Pro runs as many as you like and can narrow them with filters, so you only hear about orders over a certain value.<\/p><\/dd>\n<dt id=\"can%20i%20send%20my%20existing%20orders%2C%20not%20just%20new%20ones%3F\"><h3>Can I send my existing orders, not just new ones?<\/h3><\/dt>\n<dd><p>That is Pro. Open <strong>Import past orders<\/strong> on the destination's card and choose how many \u2014 the last 50 through the last 1000, or <strong>Everything<\/strong>. You can also narrow it to a date range, and both days you pick are included.<\/p>\n\n<p>Everything runs in the background at about 80 orders a minute, so it never floods whatever is receiving them. A shop with years of history takes hours; you can close the page, and reloading it shows how far it has got. Orders already sent to that destination are skipped, so importing twice can never produce duplicates.<\/p><\/dd>\n<dt id=\"can%20i%20send%20my%20own%20custom%20fields%3F\"><h3>Can I send my own custom fields?<\/h3><\/dt>\n<dd><p>That is Pro. Open the <strong>Columns<\/strong> tab and OrderCarry lists the custom fields it finds on your recent orders \u2014 tick the ones you want. Each becomes an extra column in every sheet and in the download, and an extra value in every webhook payload.<\/p>\n\n<p>It reads the order itself rather than talking to any particular plugin, so it works the same whether the field came from ACF, Meta Box, JetEngine, a checkout plugin or a snippet in your theme. If a field is not on any recent order you can still add it by typing its key.<\/p><\/dd>\n<dt id=\"can%20i%20empty%20a%20sheet%20without%20deleting%20anything%20in%20woocommerce%3F\"><h3>Can I empty a sheet without deleting anything in WooCommerce?<\/h3><\/dt>\n<dd><p>Yes, and it is free. Open <strong>Empty this sheet<\/strong> on the sheet's card and click <strong>Delete every row<\/strong>. It deletes the rows in the spreadsheet and keeps the headings. Your orders in WooCommerce are untouched, and the plugin still remembers which orders it has already sent, so the sheet does not simply fill up again.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20hpos%3F\"><h3>Does it work with HPOS?<\/h3><\/dt>\n<dd><p>Yes. OrderCarry declares full compatibility with High-Performance Order Storage and stores its state on the order itself, so it works with either storage mode.<\/p><\/dd>\n<dt id=\"my%20emails%20are%20not%20arriving.\"><h3>My emails are not arriving.<\/h3><\/dt>\n<dd><p>That is almost always your web host blocking outgoing mail, not the plugin. Install any free SMTP plugin and it will work.<\/p><\/dd>\n<dt id=\"where%20do%20i%20see%20errors%3F\"><h3>Where do I see errors?<\/h3><\/dt>\n<dd><p><strong>WooCommerce \u2192 Status \u2192 Logs<\/strong>, source <code>order-sync<\/code>. Also reachable from the Logs tab in the plugin.<\/p><\/dd>\n<dt id=\"does%20it%20send%20my%20data%20anywhere%20i%20did%20not%20ask%20for%3F\"><h3>Does it send my data anywhere I did not ask for?<\/h3><\/dt>\n<dd><p>No. Order data only goes to destinations you enable and addresses you type in yourself. See the \"External services\" section below for the full list.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>New plugin name on WordPress.org: \"OrderCarry - Order Automation, Google Sheets &amp; Automated Emails for WooCommerce\". Nothing changes in how it works.<\/li>\n<li>The author is now shown as OrderCarry, linking to ordercarry.com.<\/li>\n<li>Pro: the plugin now comes in French as well as German. The free version takes its translations from translate.wordpress.org.<\/li>\n<li>Order Automations: the warning shown when an automation has no destination named a heading that no longer exists. It now names the real one, \"Choose where to send the order\".<\/li>\n<li>Webhooks: every request now also carries X-Ordsync-Timestamp, X-Ordsync-Signature-V2 and X-Ordsync-Delivery-Id. The new signature also covers the time the request was sent, so your receiver can refuse an old request sent again. The delivery ID stays the same when a send is retried, so your receiver can skip an order it has already handled. X-Ordsync-Signature is unchanged, so nothing you have built stops working.<\/li>\n<li>Google Sheets and the CSV download: a value starting with a tab or a carriage return is now kept as text, like one starting with = + - or @.<\/li>\n<li>Logs: \"Retry now\" on a failed Order Automation send now repeats that automation's send. Before, it re-sent the destination's own delivery, which could do nothing at all or send the order to a destination that should only hear from automations.<\/li>\n<li>Pro: on a tab with two or more sheets, webhooks or emails, saving put the second one's filters on the first one and left the others with none. Each one now keeps its own filters. If you use filters on such a tab, check them once after updating.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>New choice for every sheet, webhook and email: \"Send orders when they become: Only when an Order Automation sends it\". That destination stays quiet until an automation sends it an order, so a \"stuck orders\" email no longer also receives every normal order.<\/li>\n<li>Order Automations: each destination you can pick now says what it already does on its own (for example \"Also gets every order that becomes Processing\"), and warns when it is switched off.<\/li>\n<li>Google Sheets: sometimes Google runs your Apps Script but fails to send its answer back. The plugin now says exactly that, instead of \"this web app no longer exists\" or asking you to paste the script again, when nothing on your side is wrong.<\/li>\n<li>Google Sheets: when this happens while sending an order, the row is most likely already in the sheet, so the order is no longer sent a second time (which could add it twice). The Logs tab tells you to check the sheet.<\/li>\n<li>Google Sheets: the plugin no longer follows Google back to your script's own address when the answer is lost. That used to show up as a failed \"doGet\" run in your Apps Script history.<\/li>\n<li>Pro: a short Google problem during the status check no longer turns the sheet red or fills the Logs tab. It is reported only after three failed checks in a row, and the same problem is written to the Logs tab at most once an hour.<\/li>\n<li>A redirect the plugin blocks for safety is no longer retried three times.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Pro: setting an order's status from the Google Sheet now works on shops that use a sequential or custom order-number plugin. Before, every row was refused with \"Order number does not match\".<\/li>\n<li>Pro: a status typed as it appears in WooCommerce, such as \"On hold\", is now understood, not only \"on-hold\".<\/li>\n<li>Pro: a message in the OrderCarry column is written once, not again at every check. Rows for deleted orders no longer use up Google's daily script time, which order sending needs too.<\/li>\n<li>Pro: a status changed in the sheet right after switching the feature on is no longer mistaken for old history and ignored.<\/li>\n<li>Pro: the background check is restarted from the admin at most once an hour, instead of asking on every admin page.<\/li>\n<li>Phone numbers like +491701234567 and numbers with a leading zero (0170\u2026, 000123) now keep their + and zeros in Google Sheets and in the spreadsheet download.<\/li>\n<li>Text a customer types, such as the order note, can no longer turn into a live link inside your Custom Email or invoice email.<\/li>\n<li>{status} in Custom Email now shows the status name your shop uses (\"On hold\"), not its internal code (\"on-hold\").<\/li>\n<li>An Order Automation that fails because Google or your mail server is briefly unavailable is now retried, like a normal order, instead of being lost.<\/li>\n<li>A webhook address that answers with a short redirect (for example to \"\/hook\/\") is now followed instead of being blocked.<\/li>\n<li>Pro: PDF invoice amounts follow your WooCommerce price settings (1,234.50 or 1.234,50, symbol before or after) instead of always using the German format.<\/li>\n<li>Pro: PDF invoices no longer fail on hosts where WordPress is set up to write files over FTP.<\/li>\n<li>Pro: when a licence expires, only the free number of Order Automations keeps running. Your saved automations are kept and come back when you renew.<\/li>\n<li>Pro: if an order appears on more than one row of a sheet, an old row can no longer undo a newer status after the sheet is sorted.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>If you use Google Sheets, paste the script again and redeploy it.<\/strong> Open the Google Sheets tab, click \"Where do I get this URL?\", copy the script into your sheet's Apps Script editor, then Deploy \u2192 Manage deployments \u2192 New version. Orders keep arriving either way, but the new status feature needs it.<\/li>\n<li>Pro: <strong>set an order's status from the Google Sheet.<\/strong> Change the Status column and the order follows in WooCommerce, which sends its own customer email as normal. Status only \u2014 addresses, prices and products are never read back.<\/li>\n<li>Pro: you choose which statuses the sheet may set. Refunded and Cancelled are off until you turn them on.<\/li>\n<li>Pro: a change must stay the same for two checks, and no more than 20 orders change in one check, so a typo or a mistaken paste cannot email your customers in bulk.<\/li>\n<li>Pro: every change is written on the order as a note, and the result appears in an OrderCarry column in the sheet.<\/li>\n<li>Pro: on a normal sheet, the Status column gets a dropdown of the statuses you allowed.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li><strong>Order Automations is easier to set up.<\/strong> Each automation now walks through four clear numbered steps instead of one long sentence to read.<\/li>\n<li>The custom fields list now explains that an unticked field can stay listed \u2014 it means the field is still on your own orders, not that switching it off did not work.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li><strong>Support messages now reach a proper support address<\/strong> rather than a personal mailbox. Nothing changes in how you send one -- the Support tab works exactly as before -- but there is now somebody at the other end who is not one person's inbox.<\/li>\n<li>The Plugins screen finally has a working <strong>Visit plugin site<\/strong> link. The plugin has never had a homepage listed; it does now.<\/li>\n<li>The recipient, message and footer fields show an example of what to type, so an empty Custom Email screen is easier to start from.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>Order Automations.<\/strong> The plugin can now notice when an order goes wrong and tell somebody. Pick a status, pick how long to wait, and it looks at the order again \u2014 if it is still stuck, your chosen destinations get it. Chase a failed payment, spot an order nobody has shipped, or flag a refund to the accountant. One automation is free.<\/li>\n<li><strong>If you already use Google Sheets, paste the script again.<\/strong> Open the Google Sheets tab, click \"Where do I get this URL?\", copy the script into your sheet's Apps Script editor and redeploy. Orders keep arriving either way \u2014 but Empty this sheet needs the new one.<\/li>\n<li><strong>Download your orders<\/strong> as a spreadsheet file, with no Google account and nothing to connect. The columns are the same ones a synced sheet gets, so a file and a sheet always agree.<\/li>\n<li><strong>A Dashboard<\/strong> that is useful before anything is set up: what is working, what is not, and what to do next.<\/li>\n<li><strong>Empty this sheet<\/strong> \u2014 delete every row and keep the headings. For clearing out test rows, and for starting a sheet again. Your orders in WooCommerce are untouched.<\/li>\n<li>Orders now land on the first tab of a new sheet, instead of behind the empty \"Sheet1\" Google gives you. An existing Orders tab is left exactly where it is.<\/li>\n<li><strong>A Columns tab<\/strong>, showing exactly which twelve columns an order becomes.<\/li>\n<li><strong>Free vs Pro<\/strong>, written honestly, so you can see what you have without leaving the plugin.<\/li>\n<li>The Google Sheets script no longer decides the columns \u2014 the plugin sends them. Renaming or reordering a column needs no new script pasted into Google.<\/li>\n<li>A heading is now escaped like any other cell, so a column named \"-Rabatt\" cannot become a broken formula in your own sheet.<\/li>\n<li>Fixed: a sheet kept advertising columns nothing was writing to any more, if the column set got shorter.<\/li>\n<li>Pro: rename, reorder and leave out columns.<\/li>\n<li>Pro: send your own custom fields \u2014 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.<\/li>\n<li>Pro: import past orders by date range, or all of them. \"Everything\" runs in the background at a steady pace and can be stopped at any time.<\/li>\n<li>Pro: PDF invoices with your own store logo from the Media Library, VAT or tax ID, custom footer note, itemized unit prices, and a live invoice preview in your browser.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>New <strong>Support<\/strong> tab. Ask a question or request a feature from inside the plugin, attach a screenshot, and send a technical report you can read first.<\/li>\n<li>Every screen now links to it, so help is one click away wherever you are.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Every install now runs as many Google Sheets, webhook and email destinations as it is configured with.<\/li>\n<li>Translations are no longer loaded by hand; WordPress handles them for hosted plugins.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: Google Sheets, Webhook and Custom Email destinations, background processing through Action Scheduler, smart retry, signed webhooks, Send Test Order and a log viewer.<\/li>\n<\/ul>","raw_excerpt":"Automate WooCommerce orders: send them to Google Sheets and webhooks, email your team or customers, and get alerts when an order gets stuck.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357309"}],"author":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/houssemremili"}],"wp:attachment":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357309"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357309"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357309"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357309"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357309"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}