~ digitalchk / docs / leads-chk
Leads Chk turns WordPress into an email marketing tool that sends through Emailit. Contacts, lists and consent live in your own database; Emailit delivers the email and reports what happened to it. The other plugins on this page send their contacts to it, so every address your tools collect ends up in one place, with its origin and its consent.
How it works
Contacts with their origin
Each contact keeps where it came from: the form, the page, the UTM campaign, the referrer, the country and the language, plus a history of what it did.
Consent
Double opt-in, a preference page and one-click unsubscribe (RFC 8058). Every consent is logged with the exact text, the IP address and the page.
Forms and popups
Signup forms as a shortcode, a block or an Elementor widget, plus popups, slide-ins and bars with triggers, targeting, Cloudflare Turnstile and their own conversion stats. The stats leave out bots, your own visits while logged in as an administrator and any IP address you list under Settings, so the numbers reflect real visitors. A form can also be a call to action with no fields: its button takes the visitor to a page you set for each language, such as a free tool, and clicks are counted. Popups can open when an element appears (the result of a tool, say) or when a JavaScript event fires, and a per-visit limit with a priority per popup keeps visitors from seeing more than one at a time.
Lists, tags and segments
Group contacts by list, tag them from any source, and build segments for campaigns and automations.
Campaigns
Written in one or more languages, with preview, test sends and scheduling. Reports cover opens, clicks, links, unsubscribes and bounces, and a campaign pauses itself when bounces or complaints run too high.
Automations
Welcome emails and follow-ups triggered by list, source or tag.
Auto-drafts
When you publish a post, a rule prepares a campaign draft from it and emails you a link to review it. It can also collect several posts into a weekly, monthly or on-demand digest. It never sends on its own.
Integrations
Other plugins send their contacts here. Each one gets its own policy (save as a contact, offer the newsletter with a checkbox, or subscribe) and the policy is enforced inside the capture, so no plugin can subscribe someone you did not agree to subscribe.
Reviews
A review page for every contact, reachable from five stars in any email, with moderation and a shortcode to show approved testimonials. Reviewers are tagged promoter, passive or detractor.
WordPress email through Emailit
Optionally, every email WordPress sends goes through the Emailit API, with a fallback to your usual mailer and a log of every message. It can take the place of an SMTP plugin.
Requirements
- WordPress 6.0 or newer
- PHP 7.4 or newer
- An Emailit account and an API key with full access
Publishing it
Place a signup form with a shortcode, the block or the Elementor widget. Popups, slide-ins and bars are shown by their own triggers and need no shortcode.
[leads_chk id="1"][leads_chk_reviews limit="6" columns="3"]
Attribution. The plugin shows a small “A tool by Digital Checkmark” line, with a link to digitalchk.com, under every form and popup it shows on your site, never in the emails or campaigns it sends. It is part of the plugin and has no setting to turn it off. If a tool and a Leads Chk form share a page, the line shows once.
Setup
Connect Emailit Required
Under Settings, paste an Emailit API key with full access and, if you want live reports, the webhook signing secret. Sending is paced under the Emailit limit of 2 requests per second (the pace is a setting, 1 per second leaves room for other email), with a daily cap that keeps room for WordPress email.
Put a signup form on the site Recommended
Under Forms and popups, create an inline form, a popup, a slide-in or a bar. Each one keeps its own conversion stats.
Connect your other plugins Optional
Under Integrations you see every plugin that sends contacts here and how many it brought. How each one behaves (saved only, newsletter offered with a checkbox, or subscribed, and which list) is set inside the plugin that owns it, in its own Integrations screen.
Send your first campaign Optional
Under Campaigns, write it in each language, preview it, send yourself a test and schedule it.
Email verification and AI help Optional
Addresses can be verified with Reoon Email Verifier or Emailit. For subjects, drafts and translations you can connect any AI service with a Chat Completions API, set its reasoning effort, and add a backup endpoint that answers when the main one fails.
Send every minute with a system cron Recommended
Emails leave from a background queue. With WordPress cron alone the queue only moves when the site gets visits or when your host runs it, often every few minutes. Add a system cron that runs the worker every minute:
* * * * * wp leads-chk worker --time=50 --path=/path/to/wordpress
Run it as the web server user. Settings shows when the worker last ran and whether it came from the system cron, and under Sending you can get an email if the system cron stops and another when it is back.
Get a draft every time you publish Optional
Under Campaigns > Auto-drafts, create a rule: which posts (content type, categories, or posts that have a custom field), one draft per post or a digest, the template in each language, who receives it and where to email the notice. Tags such as {{posts}}, {{post_title}}, {{post_excerpt}} and {{post_url}} are filled in when the draft is created. Translations published within the waiting time go into the same draft, and nothing you edit by hand is overwritten. Save and try with the latest posts creates a test draft so you can see the result.
Use it instead of an SMTP plugin Optional
Under Settings, turn on WordPress email through Emailit. Every email WordPress sends (password resets, form notices, other plugins) then goes through the Emailit API and appears in the Email log. If the API fails, the email falls back to your usual mailer, so keep your SMTP plugin installed as the backup.
Consent and privacy
- Nobody receives a newsletter without confirming their address first.
- Contacts sent by integrations are stored as leads and never subscribed without an explicit opt-in.
- Every email carries an unsubscribe link and a link to the preference page.
- Bounces and spam complaints stop future newsletters on their own.
- A first-party cookie,
lchk_attr, remembers for 90 days which page or campaign brought a visitor to the site. - Contacts are included in the WordPress personal data export and erase tools.
For developers
Leads Chk never reads other plugins: they send their contacts to it. The action does nothing when Leads Chk is not active, so no check is needed. Pass newsletter as true only when the person ticked a subscribe box, and describe what they agreed to.
do_action( 'lchk_capture', array(
'email' => $email,
'source' => 'my-plugin', // who sends it
'source_detail' => 'Contact form', // optional detail
'tags' => array( 'customer' ),
'newsletter' => ! empty( $_POST['subscribe'] ),
'consent_text' => 'Send me the newsletter',
) );
Other sites can send the same fields as JSON to /wp-json/leads-chk/v1/capture, with the key from Settings in the X-Leads-Chk-Key header. The lchk_source_label filter gives your source a readable name in the reports, and the lchk_merge_tag filter lets your plugin offer its own merge tags in emails: return a text, which is escaped for you, or an array with an html key holding HTML you have already escaped. For auto-drafts, the lchk_autodraft_post_tags filter receives the tags, the post ID and the language, and your plugin can add its own for its posts as array( plain text, escaped HTML ).
Popups that open on their own (after a delay, on scroll or on exit) stay closed while the page has the data-lchk-quiet attribute on <html>. Any script can set it, for example a chat window while the visitor is talking, and remove it afterwards. Popups opened by a click still work, and one held back this way is not counted as closed, so it can show on a later page.
If something does not work
Contacts from a plugin never get the newsletter.
That is by design: contacts sent by an integration are stored as leads unless the person opted in. Check that plugin’s Integrations policy if you expected a checkbox.
A campaign stopped by itself.
Its bounce or complaint rate went over the limit and it paused to protect your sending reputation. Its report shows which addresses failed.
A campaign takes minutes to start.
The queue waits for the next cron run. Add the system cron from step 6.
No auto-draft after publishing.
Check that the rule is active and that the post matches it, and wait for the waiting time plus a minute. A post that was already published and is updated does not trigger it.
Confirmation emails do not arrive.
Check the Emailit connection and the domain status under Settings. The key needs full access.
Getting help
Write to us through the support page. Include your plugin version, your WordPress and PHP versions, and the exact text of any error.
