ClientSync Pro
Captures client intake submissions and syncs them to an external CRM via REST + cron.
Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/dee-webtech/clientsync-pro/archive/refs/heads/main.zipA WordPress plugin that captures client intake form submissions and automatically syncs them to an external CRM or webhook, without slowing down the visitor's experience.
I'll tell you why this exists
Most "contact form" plugins just email you a submission and stop there. In real client work, submissions usually need to reach a CRM, spreadsheet, or internal tool automatically, but calling an external API in real time, while a visitor waits on a form submission, is fragile: if that external service is slow or down, the visitor's experience breaks too.
ClientSync Pro solves this by decoupling the two concerns:
- Capture: the form saves instantly to a custom database table, no external calls block the visitor.
- Sync: a scheduled background job (WP-Cron) reads pending submissions and pushes them to an external webhook/CRM on its own schedule, with automatic retry backoff if the external service fails.
How it works
- A shortcode
[client_intake_form]renders the form on any page. - Submissions go through an AJAX handler, verified with a nonce, sanitized, and inserted into a custom table (
wp_csp_submissions) rather than post meta, since this is high-volume, structured, status-queried data. - An hourly WP-Cron event reads all
pendingrows and POSTs them to a webhook URL set in Settings → ClientSync Pro. - A REST API endpoint (
/wp-json/clientsync/v1/submissions) exposes synced/pending records to authenticated external systems. - Failed sync attempts are cached with a transient "circuit breaker" for 30 minutes, so a CRM outage doesn't cause the cron job to retry the same failing record every run.
Security measures
- Nonce verification (
check_ajax_referer) before any data is processed. - Sanitize on input (
sanitize_text_field,sanitize_email), escape on output (esc_attr,esc_html) — never treated as interchangeable. - All raw SQL uses
$wpdb->prepare()with placeholders to prevent SQL injection. - Capability checks (
current_user_can) re-verified inside the settings page render itself, not just hidden from the admin menu. - REST API key comparison uses
hash_equals()to prevent timing attacks. uninstall.phpcleans up the custom table, options, and scheduled cron event on deletion.
Setup
- Upload the
clientsync-profolder towp-content/plugins/. - Activate the plugin from Plugins in wp-admin.
- Go to Settings → ClientSync Pro and set your CRM webhook URL and API key.
- Add
[client_intake_form]to any page.
Demo
Screen recording link will soon be added here
What I'd improve at scale
- Paginate the REST endpoint for large result sets.
- Encrypt the stored API key instead of a plain WordPress option.
- Replace
debug.logreliance with a dedicated logging table for sync failures.