Knowledge Base

Find answers in iTech CRM System

Search setup guides, feature documentation, communication guidance, and day-to-day workflows from the public knowledge base.

Knowledge Base / iTech System Active Features

The $300 Newsletter Promotion — How It Works

Overview

The CRM automatically tracks every lead and client through the $300 newsletter promotion, from the moment they subscribe to the newsletter through to the invoice where the discount is applied. Nothing needs to be tracked by hand.

The four statuses

  • Eligible (green) — qualifies for the offer, hasn't subscribed to the newsletter yet.
  • Enrolled (blue) — subscribed on Sendy. Hasn't used the $300 yet.
  • Redeemed (gray) — the $300 was applied to a real invoice.
  • Expired (dark) — the offer's time window closed before they used it.

Once someone reaches Enrolled, they stay Enrolled — even if they later unsubscribe from the newsletter, the CRM remembers they qualified. Expiry only affects people who never redeemed; anyone already Redeemed keeps that record permanently.

1. Setting up the offer

Under Setup → Promotions, create the offer: name, the $300 value, a coupon code, and optionally a minimum purchase amount (e.g. "$300 off, on jobs $3,000 and up"). Mark it Active. Only one promotion is active at a time — launching a new offer later (e.g. $500 in spring) is just switching which one is active, nothing else to update. Past promotions and everyone's history with them are preserved, not overwritten.

2. Eligible → Enrolled (automatic)

Every time a Lead or Client profile is opened, the CRM checks in real time: it asks the WordPress site "is this email subscribed on Sendy?" and updates the badge on the spot. Nobody has to check this manually for it to work.

Technical note: itech-core never stores Sendy credentials directly. It calls a small proxy route on the WordPress "XD Integration" plugin (which already holds the real Sendy URL/API key), authenticated with a shared key configured under Setup → Promotions → Sendy Connection.

3. Enrolled → Redeemed (on the invoice)

Staff pick the promotion from an Apply Promotion dropdown on the invoice form, and the $300 discount fills in automatically. Two safeguards run before the invoice saves:

  • The same client cannot redeem the same promotion twice.
  • The invoice must meet the promotion's minimum purchase amount, if one was set.

On a successful save, the client's status flips to Redeemed, with the coupon code and today's date recorded.

4. Expired (automatic)

A scheduled sweep checks the active promotion's end date. Anyone still sitting at Eligible or Enrolled after that date automatically flips to Expired.

Where to check status

  • Lead & Client profiles — the badge appears on the profile directly. Click "View promotion history" for the full record of every promotion this person has touched.
  • Appointment Details popup — the same badge appears there too, matched by the person's email.

FAQ

Can we run more than one promotion?
Yes — set them all up ahead of time under Setup → Promotions. Only one is Active at a time.

What if a client subscribes but we never invoice them?
They stay at Enrolled (or move to Expired if the offer has an end date and they never redeem it). A real invoice with the promotion applied is always required to reach Redeemed.

Does anyone have to check subscriptions by hand?
No — the Eligible-to-Enrolled check runs automatically. A "Check a Subscriber" tool also exists on the Promotions page for spot-checking any email on demand, but it's a convenience, not a requirement.

Where this lives in the code

modules/xd_coupons (itech-core): xd_coupons.php (hooks), helpers/xd_coupons_helper.php (core logic), controllers/Xd_coupons.php (admin + AJAX), views/admin/promotions.php (Setup screen). Invoice-side guard: modules/invoices/controllers/Invoices.php::invoice(). WordPress side: wp-content/plugins/floors-itech-crm/includes/class-sendy-api.php and class-newsletter-integration.php.

Note: this is separate from the newsletter signup form itself ([floors_newsletter_cta] shortcode), which stays entirely on WordPress and is only responsible for getting someone onto the Sendy list in the first place. The promotion tracker described here just watches for that and reacts to it.

Did you find this article useful?