=== DoubleScale CRM | All-in-One CRM – Sales, Multi-Channel Marketing, Newsletter, Booking, Helpdesk, Automation, MCP & More ===
Contributors: samuelgallegos, vixgrowy
Tags: crm, wordpress crm, email marketing, sales pipeline, newsletter
Requires at least: 5.8
Tested up to: 7.1.3
Requires PHP: 7.4
Stable tag: 1.9.10
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

All-in-one WordPress CRM: email, SMS and WhatsApp marketing, newsletters, sales pipeline, booking, helpdesk, MCP and automations. A self-hosted CRM.


== Description ==

**DoubleScale is the all-in-one CRM for WordPress.** Manage contacts, send email marketing campaigns and newsletters, automate follow-ups, run your sales pipeline, send proposals and invoices, take appointment bookings and answer support tickets, all from one plugin and one contact record, stored in your own WordPress database.

Instead of paying for a separate CRM, email marketing service, scheduling app, helpdesk and SMTP plugin, DoubleScale brings them together and keeps every customer's history in one timeline.

https://www.youtube.com/watch?v=UGLAKIIsPps

**Live demo:** [try.doublescale.io](https://try.doublescale.io) · **Website:** [doublescale.io](https://doublescale.io) · **Documentation:** [doublescale.io/docs](https://doublescale.io/docs/) · **Video tutorials:** [YouTube](https://www.youtube.com/@DoubleScale-CRM)

= Why teams choose DoubleScale =

* **One contact record for everything.** Campaigns, deals, invoices, bookings, tickets and tasks all attach to the same contact.
* **Turn on only what you need.** Every major module can be switched on or off from **Control Modules**, so your team sees a clean, focused admin.
* **Self-hosted and GDPR-friendly.** Your data stays in your WordPress database: no third-party CRM cloud, no vendor lock-in.
* **No per-contact pricing.** Unlimited contacts and unlimited custom fields.
* **Built for WordPress.** Native integrations with WooCommerce, popular form builders, LMS and membership plugins.

= Modular by design: switch modules on or off =

DoubleScale is a modular CRM plugin. Open **Control Modules** in the DoubleScale header to enable or disable Sales (with Pipelines, Proposals & Invoices, Contracts, Credit Notes and Products), Campaigns, Automations, Forms, Booking, Helpdesk, Tasks, Projects and SMTP. Turning a module off hides its menus and pauses its background jobs, APIs and role permissions. Turn it back on at any time without reinstalling, and nothing is lost.

= CRM and contact management =

A complete WordPress CRM for leads and customers. Store unlimited contacts with custom fields, organise them with tags and lists, and build dynamic segments with rules. Import contacts from CSV, WordPress users or WooCommerce customers. Every contact has a full activity timeline showing emails, messages, deals, bookings, support tickets, form submissions, page visits and automation runs, in one chronological view.

= Email marketing and newsletters =

Send professional email marketing campaigns and newsletters directly from WordPress.

* Drag-and-drop email builder with responsive blocks, a Navigator to jump to any section, column or block, saved templates and merge tags
* Broadcast to lists, tags or segments, send now or schedule for later
* A/B testing for subject lines and content
* Email sequences (drip campaigns) for onboarding and nurture flows
* Open, click, bounce and unsubscribe tracking with full delivery logs
* Unsubscribe and preference pages handled for you

= SMS and WhatsApp marketing (Pro) =

Reach customers on the channels they read most. Send SMS campaigns through Twilio and WhatsApp campaigns with Meta-approved WhatsApp Business templates, using the same audiences, composer and merge tags as email. Opt-outs and delivery status are recorded on each contact.

= Marketing automation =

A visual workflow builder that connects every module. Choose from 100+ triggers across contacts, campaigns, deals, forms, bookings, support tickets, WooCommerce, LMS and membership plugins, then add actions: send an email, SMS or WhatsApp message, start an email sequence, add tags, update a deal, create a task or call a webhook. Add delays, conditions, goals and branches to build complete customer journeys, such as welcome series, abandoned cart recovery, lead nurturing and post-purchase follow-ups.

= Sales pipeline and deal management =

Track every opportunity on a drag-and-drop kanban board. Create multiple sales pipelines with custom stages, deal values, owners and custom fields, and see forecasts at a glance. Moving a deal to a new stage can trigger automations, for example sending a proposal, creating a task or tagging the contact.

= Proposals, quotes, invoices and contracts =

Run the whole quote-to-cash process inside WordPress.

* **Proposals and quotes** with line items, taxes and online acceptance with e-signature
* **One-click conversion** from an accepted proposal to an invoice
* **Invoices** with branded PDFs and online payments through Stripe, PayPal and other gateways (Pro)
* **Contracts** with templates and signatures
* **Credit notes**, products and tax rates
* **XRechnung e-invoices** for German public-sector customers (Pro)
* **Subscriptions** and recurring billing (Pro)

= Client portal =

Give customers one secure place to see their proposals, invoices, contracts, bookings and support tickets. Add the portal to any page with the `[doublescale_client_portal]` shortcode. Customers can accept proposals, pay invoices and follow their documents without emailing you.

= Appointment booking and scheduling =

A complete appointment booking system built into your CRM, so you no longer need Calendly or a separate booking plugin. Clients book meetings, consultations, demos, classes and coaching sessions from a booking page on your own site, and every booking is saved on their contact record.

* **One-to-one and group events**, with a maximum number of attendees per time slot
* **Availability schedules** with working hours, date overrides, buffer time between meetings and booking frequency limits
* **Embeddable booking pages** with automatic time zone detection for your guests
* **A booking form** that collects your guests' details before the meeting
* **Email confirmations and reminders** for guests and hosts, with easy rescheduling and cancellation
* **Online, phone and in-person meetings**, with the meeting details sent to your guest
* **Bookings dashboard** to view, filter and manage every appointment
* **Booking Manager and Booking Agent roles** so each team member manages their own calendar
* **Every booking on the contact's timeline**, next to their emails, deals and tickets

**Booking Pro** adds team scheduling with round-robin and collective availability, two-way calendar sync with Google Calendar, Outlook / Microsoft 365, Apple Calendar and iCal, Zoom, Google Meet and Microsoft Teams links created automatically, custom booking questions with conditional logic, paid bookings with online payments, waiting lists when a slot is full, SMS reminders, and automations that run when a booking is created, confirmed, rescheduled, completed or cancelled, for example to send a follow-up email or create a deal.

= Helpdesk and support tickets =

A complete ticketing system next to your sales and marketing data.

* Shared inbox with overview cards for all, open, pending, resolved and closed tickets
* Assign agents, set status and priority, add tags, internal notes and CC recipients
* File attachments with secure downloads
* Customer support portal on any page with `[doublescale_support_portal]`, or inside the client portal
* Email notifications for customers and agents, plus helpdesk reports
* Email-to-ticket through IMAP, custom ticket fields, auto close for inactive tickets and an incoming webhook (Pro)

= Tasks and projects (Pro) =

Plan and deliver client work without a separate project management tool. Create and assign tasks with due dates and reminders, and manage projects on kanban boards with statuses, progress, discussions and custom fields, all linked to contacts and invoices.

= Built-in SMTP for reliable email delivery =

Replace your SMTP plugin. DoubleScale routes `wp_mail()` through 20+ email providers, including Amazon SES, SendGrid, Mailgun, Postmark, Brevo, SparkPost, SMTP2GO, Mailjet, MailerSend, Mandrill, Elastic Email, SendLayer, SocketLabs, toSend, Emailit, Gmail, Outlook, Zoho and any SMTP server. Use different connections for transactional and marketing email, add a fallback connection, send test emails and review full email logs.

= Analytics and reports =

Dashboards for contacts, campaigns, email delivery, automations, sales pipelines and support, with KPI cards, charts, date ranges and CSV export, so everyone can see what is working without exporting data to another tool.

= Team roles and permissions =

Give every team member the access they need and nothing more. Each person gets one level, Manager or Agent, with access to the whole CRM or to chosen modules: CRM Manager and CRM Agent, Campaign Manager and Campaign Agent, Sales Manager and Sales Rep (Pro), Project Manager and Project Member (Pro), Support Manager and Support Agent, Booking Manager and Booking Agent, and Automation Manager and Automation Agent. Contacts have an owner and collaborators, agents can be limited to their own contacts, new leads can be routed to one person or shared in turns, and a departing member's records can be handed to someone else in one step. Each person chooses their own notifications.

= AI and MCP =

* **AI writing assistant.** Connect your own OpenAI, Google Gemini, Groq, OpenRouter or OpenAI-compatible API key to draft emails, generate templates and suggest subject lines.
* **Built-in MCP server.** Connect Claude, Cursor and other Model Context Protocol clients with API keys, so AI assistants can work with your contacts, documents, campaigns and bookings, within the same module and role permissions as your team.

= Integrations =

* **E-commerce:** WooCommerce (orders, customers, abandoned carts, subscriptions and reviews), Easy Digital Downloads and SureCart
* **Form builders:** Contact Form 7, WPForms, Fluent Forms and Quill Forms (free); Elementor Forms, Bricks Forms, Gravity Forms, Ninja Forms, Formidable Forms, Forminator, MetForm, WS Form, Bit Form, SureForms, eForm and JetFormBuilder (Pro)
* **LMS:** LearnDash, Tutor LMS, LifterLMS and LearnPress
* **Membership:** MemberPress and Paid Memberships Pro
* **Messaging and payments:** Twilio, WhatsApp Business, Stripe, PayPal and more

= Who is DoubleScale for? =

Small businesses, agencies, consultants, coaches, course creators, online stores and growing sales and support teams who want a self-hosted WordPress CRM that replaces several SaaS subscriptions, from solo founders to teams managing 100,000+ contacts.

= How DoubleScale compares =

Looking for a HubSpot alternative, a Mailchimp alternative or a FluentCRM alternative? See our detailed comparisons: [vs FluentCRM](https://doublescale.io/compare/vs-fluentcrm/) · [vs HubSpot](https://doublescale.io/compare/vs-hubspot/) · [vs ActiveCampaign](https://doublescale.io/compare/vs-activecampaign/) · [vs Pipedrive](https://doublescale.io/compare/vs-pipedrive/) · [vs GoHighLevel](https://doublescale.io/compare/vs-gohighlevel/) · [vs FunnelKit](https://doublescale.io/compare/vs-funnelkit/) · [vs Brevo](https://doublescale.io/compare/vs-brevo/) · [vs MailerLite](https://doublescale.io/compare/vs-mailerlite/) · [vs Omnisend](https://doublescale.io/compare/vs-omnisend/)


== Source Code ==

This plugin includes compiled JavaScript and CSS in the `build/` directory. Human-readable source lives in `src/`.

**Public repository:** [DoubleScale on GitHub](https://github.com/vixgrow/DoubleScale)

**Build from source**
1. Install Node.js (LTS recommended)
2. From the plugin directory: `npm install`
3. Production assets: `npm run build`
4. Development/watch: `npm run dev`

Outputs include client bundles under `build/`. Third-party libraries are listed in `package.json`.

**Lint / code standards**

The PHP code follows the WordPress Coding Standards (WPCS 3.x) with `WordPress-Extra` (security sniffs) and `PHPCompatibilityWP` enabled.

1. `composer install` — installs PHPCS, WPCS, and the rest of the dev tools.
2. `composer lint` — runs `phpcs --standard=phpcs.xml.dist` against `doublescale.php`, `includes/`, `bin/`, and `phpunit/`.
3. `composer format` — runs `phpcbf` to auto-fix what it can (whitespace, indentation, brace style).

For plugin-structure / readme / asset-organization checks, install the official [Plugin Check](https://wordpress.org/plugins/plugin-check/) plugin into a local WordPress install and run it via **Tools → Plugin Check**. Plugin Check is the same tool the WordPress.org review team runs.

== Screenshots ==

1. **Dashboard** — Analytics overview with KPI cards, quick links, recent contacts, and contact analytics chart.
2. **Contact Details** — Full contact profile with activity timeline, channel subscriptions, lists, and tags.
3. **Email Builder** — Drag-and-drop campaign editor with responsive blocks, merge tags, and template library.
4. **Automation Builder** — Visual workflow editor with triggers, conditions, and branching actions.
5. **Booking Event Setup** — Configure event details, duration, color, location, and live preview.
6. **Booking Calendar** — Frontend booking page with date/time picker and automatic time-zone detection.
7. **SMTP Providers** — Choose from 20+ mail providers including SendGrid, Amazon SES, Gmail, Mailgun, and more.

== Installation ==

= Automatic =

1. In wp-admin go to **Plugins → Add New**
2. Search for **DoubleScale**
3. Install and activate
4. Open **DoubleScale** from the admin menu and complete onboarding

= Manual upload =

1. Download the plugin ZIP
2. **Plugins → Add New → Upload Plugin**
3. Activate **DoubleScale**

= After activation =

1. Review **DoubleScale → Settings**
2. Connect an SMTP provider (the SMTP module replaces `wp_mail()` immediately)
3. Import or sync contacts (CSV, WordPress users, or WooCommerce customers)
4. Create your first list, automation, booking calendar, or campaign

You'll have a working CRM + email engine + booking page in under 10 minutes.

== Frequently Asked Questions ==

= Can DoubleScale really replace my CRM, email marketing, booking and helpdesk tools? =

Yes, that is what it is built for. DoubleScale covers contact management, email marketing and newsletters, marketing automation, sales pipelines, proposals and invoices, appointment booking, a helpdesk, built-in SMTP and reports in one plugin, with SMS, WhatsApp, tasks and projects available in Pro. Every module shares one contact record, one activity timeline and one automation engine, so you can retire separate tools such as a hosted CRM, Mailchimp, Calendly, an SMTP plugin and a standalone helpdesk.

= Can I turn off the modules I do not need? =

Yes. Click **Control Modules** in the DoubleScale header to switch Sales (and its sub-modules), Campaigns, Automations, Forms, Booking, Helpdesk, Tasks, Projects and SMTP on or off. A disabled module's menus, APIs, background jobs and role permissions are paused, and everything comes back exactly as it was when you turn it on again. Contacts are always on.

= How is DoubleScale different from FluentCRM or Groundhogg? =

Most WordPress CRM plugins focus on contacts, email marketing and automation. DoubleScale includes those and adds sales pipelines, proposals and invoices, appointment booking, a support ticket system, a client portal and built-in SMTP, all around the same contact record, so you do not need extra plugins for each. See the full [DoubleScale vs FluentCRM comparison](https://doublescale.io/compare/vs-fluentcrm/).

= Is there a limit on contacts? =

No. DoubleScale never charges per contact, and the free plugin supports unlimited contacts. Sites with more than 100,000 contacts have been benchmarked.

= Where is my data stored? =

In your own WordPress database. Contacts, deals, documents, emails, tickets and tracking events are stored in tables on your server. Third-party services such as email providers, Twilio or Stripe are only contacted when you connect them yourself.

= Does DoubleScale work with WooCommerce? =

Yes, natively. Customers and orders flow into the CRM, and you can trigger campaigns and automations from order, subscription, review and abandoned cart events, including abandoned cart recovery. See the [DoubleScale WooCommerce CRM integration guide](https://doublescale.io/integrations/woocommerce/).

= Can I send SMS and WhatsApp messages? =

Yes, with DoubleScale Pro. SMS is sent through Twilio and WhatsApp through the WhatsApp Business Platform with Meta-approved templates. Both use the same audiences, composer and merge tags as email, in campaigns and in automations.

= How does the booking module compare to Calendly? =

It offers the core scheduling experience: availability rules, embeddable booking pages, confirmations, reminders and automatic time zones. The difference is that every booking lands on the contact record and stays in your own database. Booking automations, paid bookings, waiting lists, video meeting links and calendar sync are available in Pro.

= Can the helpdesk replace Help Scout, Zendesk or Freshdesk? =

For many small and growing teams, yes. You get a shared ticket inbox with statuses, priorities, tags, internal notes, agent assignment, attachments, email notifications, reports and a customer support portal. Pro adds email-to-ticket through IMAP, custom ticket fields, auto close and an incoming webhook. Because tickets sit next to sales and marketing data, agents always see the full customer history.

= Can customers open tickets from my website? =

Yes. Add the `[doublescale_support_portal]` shortcode to any page for a dedicated support portal, or use the `[doublescale_client_portal]` shortcode to give customers one place for their tickets, proposals, invoices and bookings. The client portal page is created automatically when you activate the plugin.

= How do team roles work? =

DoubleScale adds scoped roles so each person sees only what they need: CRM Manager, Sales Manager and Sales Rep (Pro), Project Manager and Project Member (Pro), Support Manager and Support Agent, Booking Manager and Booking Agent, and Automation Manager and Automation Agent. For example, a sales rep sees only their own deals, a support agent works on their assigned tickets, and an automation agent manages only the workflows they created. Site administrators have full access, users can hold several roles, and each person chooses their own notifications.

= Which form plugins are supported? =

Sixteen form builders. Four are included in the free plugin: [Contact Form 7](https://doublescale.io/integrations/contact-form-007/), [WPForms](https://doublescale.io/integrations/wpforms/), [Fluent Forms](https://doublescale.io/integrations/fluent-forms/) and [Quill Forms](https://doublescale.io/integrations/quill-forms/). Twelve more come with Pro: [Elementor Forms](https://doublescale.io/integrations/elementor/), Bricks Forms, [Gravity Forms](https://doublescale.io/integrations/gravity-forms/), [Ninja Forms](https://doublescale.io/integrations/ninja-forms/), [Formidable Forms](https://doublescale.io/integrations/formidable-forms/), [Forminator](https://doublescale.io/integrations/forminator-forms/), [MetForm](https://doublescale.io/integrations/metform/), WS Form, Bit Form, SureForms, eForm and JetFormBuilder. Submissions create or update contacts with tags, lists and mapped fields.

= How do I import my existing contacts? =

Import from a CSV file with field mapping and a preview, sync WordPress users, or import WooCommerce customers. Pro adds connectors for other CRMs and email platforms, such as ActiveCampaign.

= Will DoubleScale slow down my website? =

No. Heavy work such as campaign sending, automations and tracking runs in the background through Action Scheduler, so your public pages stay fast.

= Where can I learn how to use it? =

Watch the step-by-step video tutorials on the [DoubleScale YouTube channel](https://www.youtube.com/@DoubleScale-CRM), or open **Watch Tutorial** inside the plugin. Documentation and setup guides are at [doublescale.io/docs](https://doublescale.io/docs/).

= How do I get help? =

Free support is available in the WordPress.org forum. DoubleScale Pro includes email and priority support.

== Changelog ==

= 1.9.10 = 10 Nov 2026
**Changed**

- Website Tracking has one on/off switch: the Website Tracking module in Control Modules. The Enable switch in Settings → Website Tracking is gone (data retention stays there). Sites that had turned tracking off in Settings keep it off

= 1.9.9 = 10 Nov 2026
**New**

- Website Tracking and Lead Scoring can be switched on and off in Control Modules (with DoubleScale Pro). Both stay on unless you switch them off. With Website Tracking off, no tracking script is loaded and no page visits are recorded
- Get Started recommends Website Tracking and Lead Scoring for the goals that use them

**Changed**

- A module's database tables are created when you switch it on, not for modules you don't use. Switching a module off keeps its data

**Fixed**

- Modules that are switched off no longer break the ones that are on: the contact timeline with Campaigns off, the contact summary and payments with Invoices & Proposals off, and deleting a contact with Automations off
- Automation emails work with Campaigns off
- Dashboard: if its figures can't load, a notice says so and the calendar and tasks still show, instead of the whole page failing
- Importers: a clear message when the source plugin isn't active or an API key is missing

= 1.9.8 = 10 Nov 2026
**Fixed**

- Modules that are switched off no longer break the ones that are on. Their tables are now created on install and on this update, so the Dashboard and deleting a contact work on sites where Campaigns or Automations were never switched on, and the Projects and Tasks pages and the company page work with DoubleScale Pro 1.5.7
- Client portal: the Dashboard no longer asks for invoices, payments or bookings when Sales or Booking is off
- Settings → Client Portal: the "Book a meeting" card is hidden while Booking is off
- Analytics: with no sales module on, "Sales & Delivery Reports" is called "Delivery Reports"

= 1.9.7 = 9 Nov 2026
**Added**

- Automations: incoming webhooks read nested data. Map a value by its path, such as data.email or data.customFields.budget, to any contact field, including custom fields (Pro). A full name can fill first and last name, and a list can add tags by name
- Automations: every value of the webhook that started a workflow can be used in later steps with {{webhook:field:path}} merge tags, and in conditions under "Webhook data". The merge tag picker and the conditions list show the fields of the workflow's last received webhook
- Automations: an "Add a contact note" action, to keep details such as a chat summary on the contact's timeline

**Fixed**

- Automations (Pro): a webhook sent to one workflow started every active "Webhook Received" workflow. Only the workflow named in the webhook URL runs now
- Automations (Pro): webhook values mapped to custom fields were not saved. They are saved now, and the contact's other custom field values stay
- Automations (Pro): an empty webhook value no longer clears a field the contact already has

= 1.9.6 = 9 Nov 2026
**Added**

- Forms: Bricks Builder forms (Pro). In Forms → Create, pick Bricks, then the page and the form on it, and match its fields to contact fields, as with Elementor. Nothing has to be set inside Bricks. Forms placed in a Bricks header, footer or template are listed too and work on every page they show on. Only submissions Bricks accepts become contacts
- Automations: a "Bricks" trigger, with the page and form pickers, conditions on the form's answers and {{bricks:field:…}} merge tags
- Automations: Amelia Booking triggers (Pro): Appointment Booked, Appointment Status Changed, Appointment Canceled, Appointment Rescheduled, Event Booked and Event Booking Canceled, with service, employee and event filters, and Amelia merge tags (service or event, date, time, employee, location, meeting link, status, price)
- Automations: LatePoint triggers (Pro): Booking Created, Booking Status Changed, Booking Cancelled and Booking Rescheduled, with service and agent filters, and LatePoint merge tags (service, date, time, agent, location, status, price, booking code)
- Helpdesk: link a support ticket to a project (Pro). The ticket screens have a Project field, a ticket started from a project comes with the project filled in, and a project can show its tickets in a Tickets tab
- Client portal: a project that shows tickets gets a Tickets tab with a New ticket button, and the portal ticket form has an optional Project choice

**Changed**

- Faster admin and site requests: DoubleScale loads automation triggers, actions, conditions and merge tags only when they are used, registers only the REST routes a request needs, reads its options in one query and removes per-row queries from the contacts and projects lists
- Automations: the plugin groups in the trigger and action pickers are named alike: E-commerce Plugins, Forms Plugins and Booking Plugins

**Fixed**

- Automations: opening a saved condition on a form answer (any form builder) showed "Contact / Address 1 / Is" instead of the saved rule, and saving the step then lost the condition. The saved rule now shows as saved
- Automations: in the condition picker, a form's answers were grouped under its internal name (for example "elementor") and were offered to workflows started by other triggers. The group now carries the form builder's name and is offered to that builder's workflows only
- Automations: the WooCommerce Subscription conditions (Has Status, Payment Gateway, Total) never matched, so workflows never took their branch. They now read the subscription
- Automations: a trigger no longer renames an existing contact. On a contact that already exists, the first and last name are only filled when blank, so a booking or checkout made with a customer's email and another name keeps the customer's name. Forms keep their own "update existing contact" setting
- Zoho and Elastic Email: some connection errors stopped the page with a PHP error instead of showing the error

**Security**

- Booking: a team member who manages only their own calendars could see, change and remove the Google, Outlook, Apple and Zoom accounts connected to a colleague's calendar, including the sign-in keys of those accounts. Each calendar's connected accounts are now open only to its owner and to people who manage all calendars, and the sign-in keys never leave the server
- Booking (Pro): connecting a Google or Outlook account, or adding an Apple or Zoom account, now works only on a calendar you may manage
- Automations (Pro): "Test webhook" in the HTTP Request step is now limited to people who can build workflows
- Contacts: names, company and address are stored as plain text, and contact merge tags drop any markup, so a link typed into "First name" on a public form, booking or checkout can no longer appear in the site's emails

= 1.9.5 = 5 Nov 2026
**Fixed**

- Booking: dates are in your site's language. The booking page's date, calendar month and weekdays, and the confirmation, cancel and waiting-list pages used English day and month names on every site ("Thursday, November 5, 2026"). They now follow the site language, and the confirmation pages use the Date Format in Settings → General, for example "jueves, 5 de noviembre de 2026"

= 1.9.4 = 5 Nov 2026
**Security**

- Booking: the Approve and Reject links in organiser emails now need a logged-in team member who can manage the booking. Anyone holding the booking's link, including the guest, could approve a pending booking. We recommend updating right away
- Uploads: file names with hidden control characters (such as a null byte) are refused
- More plugin files refuse to run when opened directly by their address

**New**

- FluentCart: a FluentCart section in the contact's Purchase History and Purchases tile, with paid and partly refunded orders matched by email and lifetime revenue per currency (FluentCart's own formula, never summed across currencies)
- FluentCart: "FluentCart Current Order" automation conditions (products, total, currency, status) and "FluentCart Order" merge tags (order ID, order number, total, status, items, payment method)
- FluentCart: automations that start when an order is paid, refunded (any, full or partial) or changes status, with a Target Products filter, and an "Order Received" goal (with DoubleScale Pro 1.5.3)
- FluentCart: the buyer's name and billing details (phone, country, address, city, state, postcode) fill the contact

**Fixed**

- Booking: "Days into the future" and "Indefinitely" now count from today. They counted from the day the event was created, so events stopped taking bookings 60 days (by default) after they were created

= 1.9.3 = 4 Nov 2026
**Fixed**

- Booking questions: choosing Radio, Select or Multiple Select for a question shows its options and keeps that type (the next edit could switch it back to Text)
- Booking questions: moving a question up or down sticks, on the booking page too. Saving an event keeps the location question's place, label and help text
- Booking page: Multiple Select questions show a tick box per option, Terms questions show your terms with an "I agree" box, and Website questions use a web address field
- Booking page: two radio questions with the same options no longer pick each other's answers, and required tick boxes and Multiple Select questions must be answered before booking
- Bookings → Booking Manually: the event's questions use the same controls as the booking page
- Booking details: tick box answers read Yes or No (terms: Accepted), and Multiple Select answers list every choice
- Client portal: buttons in dialogs, such as Reschedule, keep their own text colour
- Client portal: text on mid-tone brand colours is white wherever it stays easy to read

**Improved**

- Booking page: a wider event details column, so longer descriptions sit well, and the booking card is centred in the window
- License page: redesigned
- Admin pages use the same light background as the Get Started page

= 1.9.2 = 2 Nov 2026
**New**

- Contacts: a Tickets tab lists the contact's support tickets, opens any of them, and starts a new ticket for the contact
- Client portal: rewrite the login page's texts in Settings → Client Portal → Login page: the headline, the line under it, and the side panel's title, text and points. By default the points only mention the areas your clients can see, so a site without bookings no longer mentions bookings
- Client portal: dates follow your site. Full dates use the Date Format in Settings → General (for example 01/11/2026 with d/m/Y), and month and day names use your site's language instead of each visitor's browser
- Client portal: with DoubleScale Pro, project custom fields marked "Visible to the client" show in the project's details

**Improved**

- Contact, project, deal and company pages: tabs scroll with arrow buttons instead of hiding under "More"
- Records created from a contact's page say how to share them with the contact's whole company (with DoubleScale Pro's Companies)

= 1.9.1 = 2 Nov 2026
**Fixed**

- Scheduled tasks: the cleanup after activating or updating DoubleScale could delete other plugins' scheduled jobs (for example WP Mail SMTP's email queue). It now only touches DoubleScale's own jobs, never removes a job that is still due, and runs once every plugin has loaded
- Automations: the product conditions (Products in Orders, Products in Order, Wishlist Items, Subscription Items) no longer load your whole catalogue on every DoubleScale admin page. They search products as you type; saved conditions keep working
- Helpdesk: with DoubleScale's SMTP module switched off, ticket replies and notifications are sent through WordPress and your site's own mailer (such as WP Mail SMTP) from the mailbox address, instead of being skipped

= 1.9.0 = 1 Nov 2026
**New**

- Contacts list: a Company column (on by default) and a Company Name filter
- Client portal: files your team chooses to show appear on the client's Files page as "From our team", next to their own uploads, and the client is told in their notifications. With DoubleScale Pro, turn on "Visible to client" on a contact's file, or share a file with everyone at a client company
- Client portal: records shared with the client's company show a "Shared" badge, company tickets have their own filter, and clients can share a ticket or an upload with their colleagues (with DoubleScale Pro's Companies)
- Discover Pro lists Companies and the new Agency plan

**Improved**

- Faster admin: about a fifth of the database queries per request (242 to 50 on a test site). Automation editor options are built only when the editor asks for them, and setup checks run once per version instead of on every page
- Timeline: a customer's ticket reply reads "<name> replied on a ticket" instead of "Unknown User", and ticket events say what happened ("Ticket opened", "Ticket closed", "Ticket assigned")
- Client portal: the sidebar stays in view while the page scrolls, and the Notifications page names itself in the breadcrumb

= 1.8.0 = 29 Oct 2026
**New**

- Client portal: a new design. A sidebar with your business and the client's company, search, the menu and the client's projects; a home page in your brand colour with a greeting and the account manager, the project under way, what is waiting for the client, recent activity, the next meeting, a month calendar of everything dated, recent files and billing
- Client portal: Support tickets, Bookings, Documents, Files and Time worked are redesigned. Booking and task details open in a panel at the side, and a project's Tasks switch between Kanban and List
- Client portal: clients book meetings themselves. A "Book a meeting" button on the home page, the next-meeting card and the Bookings page lists the meetings they may book, grouped by who they are with, and opens the booking page to pick a time
- Client portal: choose what clients can book in Settings → Client Portal → Book a meeting: their account manager's meetings (the events on the calendar of the team member who owns the contact), meetings you choose (the events you tick, for every client), or off (the default)
- Client portal: "Book again" on a past booking books the same meeting in one click
- Client portal: loading placeholders on every page instead of a spinner
- Brand colour: one colour in Settings → Business for the client portal, its login page and the support portal. New booking events start in it, and Get Started asks for it
- Get Started: a new goals-based setup. Pick what brings you to DoubleScale and the recommended modules are switched on for you; lists and tags are set up in one step with suggestions, and the finish screen suggests next steps
- Campaigns: leave out contacts who bought in the last N days, on the Recipients step for lists and tags. A new "Last Purchase" contact filter (within / not within N days) for Advanced Filter, the contacts list and export, and "within / not within" on the automation "Last Order" condition
- Contacts: a redesigned contact profile with figure tiles (emails, open and click rate, open deals, invoices due, open tasks, upcoming, last activity), quick actions and an Overview tab
- Contacts: export is a full page. Choose contacts with filters and a live count, choose columns, and follow the progress; import shows its current step
- Campaigns: a redesigned campaign report with an engagement funnel and a delivery ring, and an Emails tab with status buttons and counts
- Support: a redesigned ticket page with a slim bar, its own address, and a reply box that expands when you click it
- Forms: one guided page to connect a form (builder, form, field mapping, then what happens on submit, including "Assign to")
- Settings: every section in one grouped list beside the page, so no more scrolling through tabs

**Improvements**

- A shared purple header on every full-screen screen and record page (contacts, deals, projects, documents, tickets, forms, automations, integrations, SMTP). Record top bars now scroll with the page
- Booking details rebuilt as a record page, with Join and Copy on the location and opening the contact returning to the booking
- Email builder: columns get borders and rounded corners, the builder opens straight away when a campaign already has a design, and "Save & choose recipients" shows a next arrow
- Campaigns: going back from the email builder shows placeholders while the step loads; deleting a campaign asks first; include and exclude filters are explained in plain words
- Documents: proposals, invoices, contracts, payments and credit notes use the slim header; a document opens when you click its row
- Unsubscribe pages redesigned, with a way to subscribe again
- The collapsed sidebar centres its icons and shows scroll arrows
- Rows per page are remembered per table
- Discover Pro lists recurring invoices, the product catalog, the send queue and Time Tracking, with the plan each add-on needs

**Fixes**

- Campaigns: cancelling a schedule and then sending now no longer puts the campaign back on its old schedule
- Campaigns: the recipients list no longer shows an older answer after the audience changes quickly
- Roles: CRM Agent, Campaign Manager and Campaign Agent are recognised as team roles (they could not open the dashboard)
- Invoices: payment mode chips in the invoice editor show the right selected state
- Integrations: plugins installed in another folder (such as Easy Digital Downloads Pro) are detected as active
- Forms: empty answers no longer overwrite saved contact values unless "Clear fields left empty" is on
- Client portal: a link into a support ticket opens that ticket, not the first one
- Client portal: light brand colours (such as yellow) keep text, links and buttons readable, also on hover
- Watch Tutorial no longer opens behind the campaign steps
- WhatsApp: the free plugin ships no WhatsApp engine; an older Pro gets a notice to update
- Contacts and tickets: the Copy link action is removed (these pages are internal)

= 1.7.2 = 26 Oct 2026
**Fixes**

- Client portal: a page with its own page template is no longer replaced by the full-screen portal. In 1.7.0 any page holding the portal shortcode became the portal, even a page whose template never showed it

= 1.7.1 = 25 Oct 2026
**Fixes**

- Client portal: paying an invoice by card from the portal no longer hangs on "Processing…". The portal's Pay button now opens the invoice's own page, where every payment method works, with a link back to the portal
- Invoices: the card form keeps Pay off until it has loaded, and shows a message instead of a stuck button if the payment cannot start

**Improvements**

- Invoices and proposals: a clearer "I agree to the terms" checkbox
- Dashboard: refreshed cards and quick links

= 1.7.0 = 25 Oct 2026
**New**

- Client portal: a project opens as its own page, with an overview (invoiced, paid, balance due, and time worked against the estimate), its tasks and a thread on each task
- Client portal: a notification bell lists what the team sent or replied, and each client chooses which updates also reach them by email
- Client portal: an account statement per currency for any period, as a PDF or CSV, and a button that downloads all documents of a kind as one zip
- Client portal: one search across documents, projects, tasks, tickets, bookings and files, and a one-time welcome that lets a new client fill in a missing name or phone
- Client portal: the team sees when the client opened an invoice, proposal, contract or credit note, and when they saw a ticket reply
- Client portal: Time worked shows each entry's note when the team chooses to share notes
- SMTP: a "Clear logs" button on the Logs page sets how long logs are kept (never, or 7 to 365 days) and clears the whole log in two clicks
- Automations: a "Purchased Tags" condition in the "WooCommerce Current Order" group checks the product tags of the order that started the workflow
- Campaigns: an "Insert merge tag" button on the subject, the preview text and every builder field that takes merge tags
- Projects (Pro): projects have a team, and the Dashboard counts the projects you are on
- The sidebar groups its menus under Services and Work
- Client portal: a new "Time worked" page shows your clients the time spent on their projects, with a search box, a period picker (last 30, 60 or 90 days, this year or all time), the total time, the average hours per month and days per week, a monthly hours chart and the time split by project. Each project's Time tab gets the same search and period picker. Notes and billing details are never shown to the client. Needs the DoubleScale Time Tracking add-on
- Extensions: time tracking now comes as the DoubleScale Time Tracking add-on, listed in the extensions store
- Automations: new "Delay until day of the month" step (Pro), for example "the 25th of next month at 09:00", in your site's timezone
- New order merge tags for WooCommerce automations: the products bought, and links to review them, as one line for WhatsApp or as cards with image and title for emails
- Dashboard: a new home with a greeting and quick actions, four headline figures with their 30-day trend, a calendar of what is coming up, "Needs your attention" for anything overdue, and the rest at a glance. Each card shows only what that person may see
- Team roles: every team role now has the Dashboard and Tasks. Sales and Project Managers see every task, everyone else their own
- Control Modules: a redesigned window grouped by area, where the client portal and Time Tracking can now be turned on or off
- Client portal: a full-screen portal page (the default) and a login page with your business logo and name, set in Settings › Client Portal
- Client portal (Pro): show contact custom fields on the client's My Profile, or let the client edit them
- Invoices: payment instructions (shown beside the totals) and a footer line on every invoice, with merge tags, set in Sales › Settings
- Helpdesk: read a ticket oldest or newest first

**Fixes**

- UpdraftPlus: "Backup Now" said the backup had started, then stopped before saving anything while DoubleScale was active. Backups now run to the end
- Client portal: clients no longer see deals anywhere in the portal
- Client portal: a credit note applied to an invoice is listed under Payments but no longer counted in Total paid
- Client portal: invoices show "Pay" only when an online payment method can take them, and "View" otherwise
- Client portal: the contract notification names the contract instead of its number
- Client portal: the invitation brings the client straight to the portal, and logins keep working after the client's email changes
- Client portal: a ticket thread opens on its latest message
- Client portal: uploading a file no longer waits for the team's notification emails
- Client portal: no update emails about areas hidden from the client, "Download all" shows only when there are documents, and the welcome says which detail needs fixing
- Client portal: tapping plain text no longer scrolls the page to the bell, and a long time entry note no longer stretches the table
- Documents: a document moved to another client stops opening for the first one
- Documents: the Ocean Corners, Boxed, Title Bar and Side Tab templates lose their colored page bands, and Boxed and Side Tab PDFs match the screen
- Notifications: saving the settings unchanged no longer fails, the retention period is kept and old notifications are cleaned up, a partial save keeps the other settings, and system notices reach the administrator's bell
- Contacts: choosing "Unassigned" in Owner & sharing works, and a removed share stays removed
- Campaigns: test emails fill Last Post tags with the latest published post, and cart settings show the working opt-out tag and wait 30 minutes by default
- WhatsApp messages sent from a workflow were refused by Meta with "Number of parameters does not match" when the template had been used in a campaign before. They now send the step's own variables, and order and coupon tags in them are filled in
- Contacts: the contacts chart on the Dashboard counted a day across every month; each day and month is now counted once
- Booking: the Calendars page no longer reloads its own calendar in a loop

= 1.6.4 = 16 Oct 2026
**New**

- Contacts › Lists: each list shows how many contacts are subscribed to it, the number its link opens, plus "+N unsubscribed" when some members unsubscribed from the list. That link opens them with the new "Unsubscribed from" list filter
- Mobile app: team members see exactly what their role allows, the same as in the admin, including the Campaign Manager and Campaign Agent roles

**Fixes**

- Fixed a critical error that took the whole site down when DoubleScale ran next to MailerPress, or any other plugin that bundles its own copy of Laravel's libraries. DoubleScale now keeps its copies of Illuminate, Carbon and Doctrine under its own names, so two plugins can no longer clash over them
- Every DoubleScale Pro version keeps working with this update, whichever of the two plugins you update first
- The reminder to update DoubleScale Pro for WhatsApp sending now asks for Pro 1.2.35, the release that brings it. It asked for 1.3.0, a version that won't be released
- Sales Reps and CRM Agents can no longer hand one of their sales documents to a colleague through another role's project access

= 1.6.3 = 15 Oct 2026
**New**

- Sales (Pro): XRechnung e-invoicing can be switched off in Sales › Settings › E-invoicing. When it is off, invoices show no XRechnung button, the invoice list offers no XML download and the form no longer asks for a Leitweg-ID. It stays on for sites that already use it
- Daily send limits: each channel has one daily limit that counts every message sent, whether a campaign or a workflow sent it, and the count starts again every day. The email limit is the "max per day" in Settings › Email
- Automations: a failed workflow step always shows why it failed

**Changes**

- Campaigns pause when they reach the daily limit and carry on just after midnight, and they give way while workflow messages are waiting to send
- The per-second sending limit is now exact: no single second sends more than the limit
- Turning off the Campaigns module now also stops the scheduled SMS sending task, so it no longer fails every minute
- More consistent capitalisation across the interface text

**Fixes**

- Email sequences with more than about 1,400 contacts could lose their enrolments and settings. Campaign settings now have room for any size, and existing sites are updated automatically
- Notification emails name your site in the footer instead of "Plugin", and their "Manage preferences" and "View details" links also work when the admin menu is white-labelled
- Saving settings with an invalid From email now explains what is wrong instead of failing with a server error
- Booking: the contact timeline no longer shows an error when another plugin fires a booking event without a booking

= 1.6.2 = 13 Oct 2026
**New**

- Client portal: clients can log out from the portal header, and Home lists what is waiting for them with a direct link: invoices with money due (overdue first), contracts to sign and proposals to answer
- Client portal: a new My Profile area where clients keep their name, phone and address up to date, with clear guidance on what each field takes. Your team sees each change on the contact's timeline, and you can turn editing off for everyone or for one client
- Calendar: projects appear on their due date in the team calendar and the client portal calendar, coloured by status (done, late or open), with a Projects filter
- Client portal bookings: online meetings show their join link (Zoom, Google Meet, Teams or any web link) and in-person meetings their address, and the event's rules on cancelling and rescheduling now apply in the portal too
- Booking: the confirmation, waiting-list and cancel pages link back to your website
- Email builder: sections now have Corner Radius and Border controls (solid, dashed or dotted, with a width per side and a colour), so rounded cards and accent bars can be designed and edited in the builder

**Changes**

- Invoices: an invoice that has only offline payment methods ticked (such as bank transfer or cash) no longer offers online payment on the public invoice page or in the client portal. Invoices with no method ticked still offer every enabled gateway. Check invoices that should take card payments have a gateway ticked

**Fixes**

- Campaigns: merge tags with a fallback, such as {{contact:first_name|there}}, now work in campaigns sent through SMTP2GO and through bulk providers such as Mailgun or SendGrid. Before, they could arrive exactly as written
- Campaigns: queued SMS and WhatsApp messages go to the contact's current number, even when it changed after the message was queued
- WhatsApp: a contact's new WhatsApp number no longer inherits the old number's 24-hour messaging window
- DoubleScale Pro stays active when an update moves it to a different plugin folder
- Payments: a card form that cannot load Stripe now says so instead of showing a Pay Now button that does nothing
- Client portal: the portal loads wherever its shortcode is placed, including synced patterns, page builders and theme templates
- Client portal: the ticket and document lists keep every ticket and every unpaid invoice or waiting proposal, Home's numbers update after the client pays or cancels, and errors are explained in plain words
- Client portal: amounts are written one way and in the store's currency, Total paid is shown per currency, payments name their method with a real date and reference, and overdue invoices stay marked overdue
- Client portal: documents show when they were signed, accepted or declined, contracts end on their last day, bookings say whether they await approval, payment or a spot, and activity is dated by when it happened in the reader's own language
- Support: ticket dates appear in the reader's own time zone with the day, threads show who wrote each message and the assigned agent, replies answer the customer's latest email, and the portal's new ticket window shows file limits and custom fields
- Client portal: a page locked to one support department counts its own open tickets, a ticket names the department the client picked, and the documents status filter no longer offers "Draft"
- Booking: the host's address opens a map, their phone starts a call, and a custom meeting place opens its link
- Contracts: an expired contract shows "Expired" once instead of twice

= 1.6.1 = 12 Oct 2026
**New**

- Email builder: a new Navigator lists every section, column and block as a tree. Click a row to select it and jump to it on the canvas, hover to outline it, and drag the panel anywhere. Open it from the Navigator button or with Ctrl/Cmd + I

**Fixes**

- Emails: an email that already has its own unsubscribe link no longer gets the email footer from your settings added below it, so designed emails with their own footer are sent as designed. Emails without an unsubscribe link still get the footer

= 1.6.0 = 12 Oct 2026
**Security**

- Security fix: file attachments (client portal, helpdesk tickets, contact and email attachments) are now checked against a strict list of allowed file types, and every file is stored under a safe name with its verified extension. Thanks to wachiss (Datafarm Co., Ltd.) for responsibly reporting this through the Wordfence Bug Bounty Program. We recommend updating right away.

**New**

- Team roles: each member gets one level, Manager or Agent, with access to the whole CRM or to chosen modules, set from a new one-screen role picker. New CRM Agent role, and Campaign Manager and Campaign Agent (renamed from Marketing)
- Contact ownership: contacts have an owner and collaborators. Choose whether agents see every contact or only their own, shared and unassigned ones, change owners in bulk, and records shared through deals, tasks, tickets and bookings stay visible to the people working on them
- Lead routing: send new leads to one person or share them in turns, with rules per source; each form can name its own owner, and removing a team member hands their records to someone else
- Client portal: choose what each client sees, area by area, from Settings → Client Portal, or give one client their own access from their contact page (which can also create their account)
- Client portal: projects are now cards with progress, budget and due date, and each project opens with tabs for its overview, invoices, proposals, shared files and history
- Client portal: customise the welcome message clients see
- Team notification when a client uploads or removes a file in the portal
- Every booking is recorded on the guest's contact: booked, confirmed, rescheduled, cancelled and completed appear in the timeline and the Meetings tab
- Contact import maps CSV columns to contact fields automatically
- Mention teammates with @ in comments
- Project managers and members get their own tasks, settings and notifications
- New video tutorials for the Client Portal, WhatsApp, Projects, Tasks and Booking

**Fixes and improvements**

- Booking: a switched-off event can no longer be booked, private events stay off the calendar page, paid bookings returning from the payment page follow Redirect After Booking, and names or emails a guest edits after prefill are kept
- Booking: time format, week start and calendar files follow your booking settings; confirmation pages no longer write a calendar file on every view, and old leftover files are cleaned up
- Booking: clearer wording, readable dates and locations, form fields validated when you leave them, and the host's calendar photo shown instead of the WordPress avatar
- Converting a proposal by hand records its acceptance; Recurring Invoice is offered only with Pro
- Quill Forms dates, consent and number answers, and zip codes, map to contacts correctly
- The lead score shows on the contact card again, and merging duplicates keeps the identifiers you typed
- Settings: Export logs downloads the log file, and client portal settings can only be changed from Settings → Client Portal
- The AI key saved in Settings → AI works without reloading the page, and Projects remembers Kanban or List view
- Invoices and tickets in the client portal scroll properly on a phone

= 1.5.1 = 5 Oct 2026
**New**

- Customers can upload files from the client portal (DoubleScale Pro): turn it on in Settings → Client Portal, and optionally allow only the file types you pick. Each file is added to the contact's Attachments
- Contact attachments (DoubleScale Pro) show who uploaded each file, the client or a team member, and the contact's timeline names the client when they upload or remove a file

**Fixes and improvements**

- File links in the contact timeline keep opening; they used to stop working about an hour after the file was attached
- Attachments on contacts, deals, projects and tasks can no longer be opened from a direct file address; they open through DoubleScale only
- Contacts → Advanced Filters: the Tags and Lists pickers keep loading as you scroll, drag the scrollbar or use the keyboard, instead of stopping at the first 10
- Advanced Filters return the right contacts: "Is not" and "Does not contain" keep contacts whose field is empty, the Status filter works again, and Role, Page Visited, checkbox fields and Last Email Open/Sent/Clicked rules match correctly
- "Between" date rules ask for a From and a To date, in Advanced Filters and in automation conditions

= 1.5.0 = 5 Oct 2026
**New**

- Helpdesk inbox overview: All, Open, Pending, Resolved and Closed cards that filter the ticket list in one click
- Helpdesk: an actions menu on every ticket (view, mark as resolved, close, reopen, delete)
- Helpdesk staff (Support Manager and Support Agent) choose their own helpdesk notifications in Settings
- Automation Manager and Automation Agent roles: agents build and manage their own workflows, managers see them all
- Automation staff choose their own automation alerts
- Automation goals: a contact who reaches a goal jumps ahead, and an unmet goal can wait, continue or end the run, with the journey showing why
- New "Email Opened" automation trigger (DoubleScale Pro): start a workflow when a contact opens an email, for every email or only chosen campaigns
- A link click in an email whose images were blocked now counts as an open for automations, notifications and lead scoring
- toSend and Emailit email providers in SMTP
- "Watch Tutorial" buttons open the video tutorials for Email Marketing, Sales Pipeline, Proposals & Invoices, Automations and Helpdesk
- Middle-click and Ctrl/Cmd+click open admin pages and list entries in a new tab
- Invoices: service date or period of supply, buyer reference, and the § 19 / reverse-charge note for untaxed lines
- Invoices: hooks for DoubleScale Pro's XRechnung e-invoice export, a warning when an invoice changed after its XRechnung was issued, and add-ons can attach files to the invoice email
- Campaigns: unsubscribe reasons and contact links in the overview, and the open tab is kept in the address
- Campaigns: open a contact's profile from the Unsubscribes list
- WhatsApp campaign analytics show one Total Recipients card
- Contacts: hover "+N" to see the tags and lists it hides
- Refreshed booking editor layout and icons
- Team management now says "Team Member" and explains what each member can do

**Fixes and improvements**

- Campaigns: merge tags (unsubscribe link, first name, open tracking) are converted for the mailer the From address actually sends through, and the batch size follows that mailer
- Campaigns: scheduled campaigns show their send time in the lists
- Campaigns: the SMS and WhatsApp phone preview shows the real message
- Campaigns: paused and cancelled campaigns open on their overview
- Campaigns: the Unsubscribes list shows the real reason and the WhatsApp number
- Campaigns: duration is reported in whole seconds (no PHP 8.1 deprecation notice)
- Helpdesk: reports count agent replies, not every message activity
- Helpdesk: the ticket stays on screen while it saves, and status, priority and tag changes show at once
- Helpdesk: ticket history reads as plain sentences with the agents' names
- Helpdesk: a single support mailbox, with no mailbox choices to make
- Client portal: customers see their real ticket history, and a ticket shows as Open again right after they reply
- Helpdesk: the agent reply email no longer assumes the agent's gender
- Automations: a phone number shared by two contacts never blocks a run or takes over the other contact
- Automations: WooCommerce order workflows (DoubleScale Pro) save the buyer's phone number on the contact, and their WhatsApp number with the country code
- Automations: a step panel closed while saving stays closed, condition rules line up, and the trigger list names "Lists Applied" instead of its slug
- Automations: delay lengths read naturally in the journey
- Automations: the Zapier action is removed; the HTTP Request action covers it
- Contacts: long tag and list chips no longer overflow the contacts table
- Contacts: the unsubscribe preference form answers exactly once
- Email: a saved copy of the default footer still counts as the default, and an email's own unsubscribe link takes precedence over it
- Email: buttons keep their styling across email clients
- Documents: the admin preview, client portal and public pages show the company block exactly as the PDF prints it
- Documents: the PDF, XRechnung and View buttons fit on the document card
- Errors from invoice and proposal list actions now scroll into view instead of appearing off-screen
- Booking: a missing booking answers "not found", and the bookings list always shows the latest filter's results
- SMTP: saving a toSend connection checks that its From domain is verified
- SMTP: email subjects keep characters such as < > and %
- Tables keep their rows in place when a page rebuilds its columns
- The sales email template editor loads only for people who may edit it

= 1.4.6 = 27 Sep 2026
- Rename a campaign at any status from the campaign list or the campaign overview
- Show the total contact count while searching
- Keep campaign delivery and read rates in sync with the per-status counts
- Name the missing email, phone, or WhatsApp address in the skipped-recipients banner
- Cap the campaign recipients list so Next Step stays reachable
- Fix contact filters so "Is empty" and "Is not empty" match the right people
- Apply WhatsApp recipient cooldown on campaign resends
- Keep a delivered Send Email, SMS, or WhatsApp automation step from failing the run

= 1.4.5 = 27 Sep 2026
- Update the product overview YouTube video

= 1.4.4 = 27 Sep 2026
- Show the product overview video on Get Started
- Stop WhatsApp resends from hitting Meta's per-user marketing cap
- Keep the booking event screen from going blank when limits were never saved

= 1.4.3 = 25 Sep 2026
- Fix an issue with Meta daily limits

= 1.4.2 = 24 Sep 2026
- Collect named WhatsApp template variables in the campaign step
- Stop campaigns from pausing on Meta messaging-tier quotas
- Still block WhatsApp sends when the Meta account itself is restricted
- Prevent deleting or renaming email templates that a campaign still uses
- Improve campaign message lists and bulk actions
- Keep debug logs working when a message contains malformed UTF-8

= 1.4.1 = 23 Sep 2026
- Add WhatsApp campaigns with Meta template matching, header media, carousel cards, and button variables
- Show how many WhatsApp recipients are reachable before send
- Cancel a scheduled campaign
- Recover stranded campaign messages and keep campaign analytics in sync
- Add merge-tag fallbacks when a field is empty
- Show a created date on SMTP connections (including older connections)
- Always log DoubleScale emails, including automations, by tracking reference instead of the HTML body
- Submit sales documents for approval
- Improve booking iframe embedding, confirmation layout, and mobile layout
- Keep queued task callbacks working when Action Scheduler unwraps their arguments
- Distinguish a disabled module from a failed request in admin fetches

= 1.4.0 = 21 Sep 2026
- Always log campaign and automation emails as a tracking reference instead of a copy of the HTML per recipient
- Send individual emails as conversation messages, without the campaign card or “Sent from” footer
- Do not append a second unsubscribe footer when the message already has one
- Isolate the support portal in a Shadow DOM so theme CSS cannot restyle it
- Route SMTP by matching the From address before falling back to other connections
- Keep typing in paginated selects while options are still loading
- Ignore stale WhatsApp failure webhooks after the message has already been delivered
- Apply the per-second send cap to automation emails
- Run consecutive cheap automation steps in one go instead of queueing each one
- Size the Action Scheduler runner for queue-heavy modules
- Keep editor selection working inside Shadow DOM contenteditable fields
- Show CSV in uppercase on the contact import wizard

The full history of earlier versions is in [changelog.txt](https://plugins.svn.wordpress.org/doublescale/trunk/changelog.txt).

== Upgrade Notice ==

= 1.0.0 =
First stable release.

== Privacy Policy ==

DoubleScale stores CRM, campaign, booking, task, support, and analytics data in your WordPress database. The plugin does not transmit that core repository to DoubleScale servers by default.

Where you enable optional third-party integrations (SMTP providers, Twilio, Stripe, WhatsApp, Slack, ActiveCampaign, HubSpot, etc.), data flows are governed by those providers' terms — and only carry the fields you explicitly map. You can disable any connector by removing credentials or turning off related automations.

Privacy-minded operators have access to: per-contact GDPR exports, hard-delete workflows, consent tracking per channel, retention rules for tracking data, and unsubscribe handling for every send.

== External Services ==

DoubleScale connects to external services **only when you configure** those integrations. No data is transmitted without your API keys, OAuth grants, or explicit provider setup. Each provider listed below is independent of DoubleScale; using one means you also agree to that provider's terms and privacy policy.

For every service below:

* **Endpoint** — API base URL used after you save credentials (not a public marketing or documentation page; it may not load in a browser).
* **Terms** / **Privacy** — Public legal pages for that provider. These are the URLs WordPress reviewers and site owners should open to read each service's policies.

= AI services =

**OpenAI (optional)**
* Purpose: AI-assisted email composition and template generation.
* Data sent: The prompt text and any campaign content you submit through the AI builder. Sent only when you click an AI generate action.
* Endpoint: `https://api.openai.com`
* Terms: https://openai.com/policies/terms-of-use
* Privacy: https://openai.com/policies/privacy-policy

**Google Gemini (optional)**
* Purpose: Alternative AI provider for email composition.
* Data sent: Prompt text and campaign content, only when you click an AI generate action.
* Endpoint: `https://generativelanguage.googleapis.com`
* Terms: https://policies.google.com/terms
* Privacy: https://policies.google.com/privacy

= SMTP / email providers =

Each provider is selectable per connection. DoubleScale sends outgoing mail to that provider's API only after you save credentials.

* **SendGrid** — `https://api.sendgrid.com` · [Terms](https://www.twilio.com/legal/tos) · [Privacy](https://www.twilio.com/legal/privacy)
* **Mailgun** — `https://api.mailgun.net` · [Terms](https://www.mailgun.com/terms) · [Privacy](https://www.mailgun.com/privacy-policy)
* **Postmark** — `https://api.postmarkapp.com` · [Terms](https://postmarkapp.com/terms-of-service) · [Privacy](https://postmarkapp.com/privacy-policy)
* **SparkPost** — `https://api.sparkpost.com` · [Terms](https://www.sparkpost.com/legal/terms-of-use) · [Privacy](https://bird.com/en/legal/privacy)
* **SMTP.com** — `https://api.smtp.com` · [Terms](https://smtp.com/terms-of-service) · [Privacy](https://smtp.com/privacy-policy)
* **SMTP2GO** — `https://api.smtp2go.com` · [Terms](https://www.smtp2go.com/terms/) · [Privacy](https://www.smtp2go.com/privacy/)
* **MailerSend** — `https://api.mailersend.com` · [Terms](https://www.mailersend.com/legal/terms-of-use) · [Privacy](https://www.mailersend.com/legal/privacy-policy)
* **Mailjet** — `https://api.mailjet.com` · [Terms](https://www.mailjet.com/legal/terms) · [Privacy](https://www.mailjet.com/privacy-policy/)
* **Brevo (Sendinblue)** — `https://api.brevo.com` · [Terms](https://www.brevo.com/legal/termsofuse/) · [Privacy](https://www.brevo.com/legal/privacypolicy/)
* **Mandrill** — `https://mandrillapp.com/api` · [Terms](https://mailchimp.com/legal/terms/) · [Privacy](https://mailchimp.com/legal/privacy/)
* **ElasticEmail** — `https://api.elasticemail.com` · [Terms](https://elasticemail.com/resources/usage-policies/terms-of-use/) · [Privacy](https://elasticemail.com/resources/usage-policies/privacy-policy/)
* **SendLayer** — `https://console.sendlayer.com/api` · [Terms](https://sendlayer.com/terms-of-service/) · [Privacy](https://sendlayer.com/privacy-policy/)
* **SocketLabs** — `https://inject.socketlabs.com` · [Terms](https://www.socketlabs.com/terms-of-use) · [Privacy](https://www.socketlabs.com/privacy-policy/)
* **Loops** — `https://app.loops.so/api` · [Terms](https://loops.so/terms) · [Privacy](https://loops.so/privacy)
* **Amazon SES** — AWS regional endpoints (e.g. `https://email.us-east-1.amazonaws.com`) · [Terms](https://aws.amazon.com/service-terms/) · [Privacy](https://aws.amazon.com/privacy/)

= OAuth-based mail providers =

Send mail through your own account via OAuth. Outgoing email content and profile email are sent on connect.

* **Gmail / Google Workspace** — `https://www.googleapis.com/oauth2/*`, `https://gmail.googleapis.com` · [Terms](https://policies.google.com/terms) · [Privacy](https://policies.google.com/privacy)
* **Microsoft Outlook / 365** — `https://login.microsoftonline.com`, `https://graph.microsoft.com` · [Terms](https://www.microsoft.com/legal/terms-of-use) · [Privacy](https://privacy.microsoft.com/privacystatement)
* **Zoho Mail** — `https://accounts.zoho.com`, `https://mail.zoho.com/api` · [Terms](https://www.zoho.com/terms.html) · [Privacy](https://www.zoho.com/privacy.html)

= CRM sync providers (Pro) =

Two-way contact and deal sync. Only mapped fields are sent.

* **ActiveCampaign** — Your account's API host · [Terms](https://www.activecampaign.com/legal/terms-of-service) · [Privacy](https://www.activecampaign.com/legal/privacy-policy)
* **HubSpot** — `https://api.hubapi.com` · [Terms](https://legal.hubspot.com/terms-of-service) · [Privacy](https://legal.hubspot.com/privacy-policy)
* **Pipedrive** — `https://api.pipedrive.com` · [Terms](https://www.pipedrive.com/en/terms-of-service) · [Privacy](https://www.pipedrive.com/en/privacy)
* **GoHighLevel** — `https://marketplace.gohighlevel.com`, `https://services.leadconnectorhq.com` · [Terms](https://www.gohighlevel.com/terms-of-service) · [Privacy](https://www.gohighlevel.com/privacy-policy)

= Messaging providers (Pro) =

* **Twilio** — SMS sending and inbound. Phone numbers and message content sent. `https://api.twilio.com` · [Terms](https://www.twilio.com/legal/tos) · [Privacy](https://www.twilio.com/legal/privacy)
* **Meta WhatsApp Business** — WhatsApp sending and inbound via Cloud API. `https://graph.facebook.com` · [Terms](https://www.whatsapp.com/legal/business-terms) · [Privacy](https://www.whatsapp.com/legal/business-data-transfer-addendum)

= Payments (Pro) =

* **Stripe** — Booking payments (amount, currency, payer email). `https://api.stripe.com` · [Terms](https://stripe.com/legal) · [Privacy](https://stripe.com/privacy)

= Plugin-specific services =

* **DoubleScale (doublescale.io)** — License validation, Pro add-on store, update checks. Sends site URL, environment type, and (on explicit action) license key / add-on ID. No CRM or contact data. `https://doublescale.io` · [Terms](https://doublescale.io/terms) · [Privacy](https://doublescale.io/privacy)
* **UI Avatars (ui-avatars.com)** — Gravatar fallback. The browser loads an initials avatar when no Gravatar exists; only the display name is in the URL. `https://ui-avatars.com/api/` · [Terms](https://ui-avatars.com/terms) · [Privacy](https://ui-avatars.com/privacy)

= AI provider endpoints (optional, bring-your-own-key) =

Point DoubleScale at any OpenAI-compatible endpoint with your own API key. Providers are **not** contacted unless you save credentials.

* **OpenRouter** — `https://openrouter.ai/api/v1` · [Terms](https://openrouter.ai/terms) · [Privacy](https://openrouter.ai/privacy)
* **Groq** — `https://api.groq.com/openai/v1` · [Terms](https://groq.com/terms-of-use) · [Privacy](https://groq.com/privacy-policy)
* Any other OpenAI-compatible endpoint you supply.

= Disabling =

Disable any connector by removing its credentials in **DoubleScale → Settings** or by deactivating the related automation. Outgoing API calls only happen when you trigger an action that requires the configured service.

== Credits ==

* **Website & documentation:** [doublescale.io](https://doublescale.io)

== Support ==

* **Website & documentation:** [doublescale.io](https://doublescale.io)
* **WordPress.org support:** https://wordpress.org/support/plugin/doublescale/ (when the plugin listing is public)

== Contribute ==

Bug reports, ideas, and pull requests are welcome on the public GitHub repository linked in the **Source Code** section.

== Languages ==

DoubleScale is translation-ready. English ships by default.

Shipped language files live in the plugin `languages/` folder:

* `doublescale.pot` — translation template for translators and Loco Translate

Locale `.po` / `.mo` files are generated at release time or created by translation plugins on the site. English uses the source strings by default.

Compatible with **Loco Translate**, **WPML**, **Polylang**, and other WordPress translation tools. Regenerate the template after string changes with:

`npm run make-pot`

Compile `.mo` files locally when needed with:

`npm run make-mo`

Community translations are also welcome on WordPress.org once the plugin listing is public.

== Compare ==


== Integrations ==

Detailed setup guides for connecting DoubleScale with your existing WordPress tools:

**E-commerce & CRM**

* **WooCommerce CRM Integration:** [doublescale.io/integrations/woocommerce](https://doublescale.io/integrations/woocommerce/)
* **LearnDash CRM Integration:** [doublescale.io/integrations/learndash](https://doublescale.io/integrations/learndash/)

