Description
Calendar and CRM by J6 turns your WordPress site into a booking desk and a lightweight CRM in one. Visitors book meetings on your own domain. Everyone who books becomes a contact you can move through a pipeline, tag, message and follow up with, without copying data between tools.
Your bookings, contacts, availability and calendar tokens live in your own WordPress database.
Booking
- A booking page on your own domain (default
yoursite.com/calendar, you can rename it) that adapts to light and dark, in English, Hindi, Spanish, French and German. - Multiple hosts, each with a personal booking link, and deep links straight to one meeting type.
- Google Calendar or Outlook sync for every host: busy times block automatically, and new bookings create calendar events with a Google Meet or Teams link.
- Weekly hours, date overrides, buffers, minimum notice, daily and weekly caps, and a rolling booking window.
- Round-robin, collective and group (multi-seat) meetings, with a waitlist when a session is full.
- Custom booking questions, including file uploads (PDF, JPG, PNG).
- Self-serve reschedule and cancel links for invitees.
- Take payment for a booking with your own payment link (for example Stripe or Razorpay) and mark bookings as paid when the payment webhook arrives.
- Embed anywhere: a block, a shortcode, a popup button or a floating launcher.
CRM
- Every booker is saved as a contact automatically, deduplicated by email or phone.
- Pipeline stages, tags, custom fields, a lead owner, search and filters, and CSV import and export.
- A contact card with the full booking and message history, and the contact’s WhatsApp conversation when Periskope is connected.
- Automations: when a contact changes stage or gets a tag, send a WhatsApp message or an email, or post to Slack.
Messages and reminders
- Confirmation, reschedule and cancellation emails you can rewrite with
{placeholders}. - Reminders before the meeting, at a set time on the day, or after it (for thank-yous and follow-ups), by email or WhatsApp.
- WhatsApp through Periskope or the official WhatsApp Business Cloud API, with opt-out (STOP) handling.
- Send email through your own SMTP server or a provider API (Resend, SendGrid, Mailchimp Transactional), or leave it on WordPress’s default mail.
Two ways to connect calendars
On first setup you choose how hosts link Google or Outlook. You can switch at any time without losing data.
- Bring your own app (free). Use your own Google Cloud or Microsoft Azure credentials. A step-by-step wizard walks you through creating them. Calendar sign-in never goes through J6 Venture in this mode.
- One-click Connect (optional paid service). Hosts sign in with Google or Microsoft through J6 Venture’s verified app, with no cloud setup. This is an external service provided by J6 Venture and needs a J6 Connect key (one-time purchase, 7-day money-back: https://j6venture.com/refund-policy/). The plugin’s own features are the same in both modes.
Every feature in this plugin is free and fully functional without any purchase. Calendar sync, booking, CRM, reminders, messaging and all other features work using the free “Bring your own app” mode. The optional J6 Connect key does not unlock any plugin feature — it only pays for access to J6 Venture’s external one-click sign-in service (which brokers OAuth on J6’s own servers so you don’t have to create your own Google Cloud or Azure app). You never need it to use the plugin.
Privacy
- Integrates with the WordPress personal-data export and erase tools.
- Honeypot, rate limiting and optional email verification on the public booking form.
- An optional “Powered by J6 Venture” credit is available for the booking page and emails. It is OFF by default and appears only if you turn it on in Settings Page appearance.
External services
This plugin connects to the third-party services below. Each one is used only when you turn on or configure the feature that needs it. No usage data or tracking is sent to J6 Venture.
J6 Connect broker (J6 Venture)
The J6 Connect broker (at connect.j6venture.com) is used only if you choose “One-click Connect” for calendars, or click “Connect Slack” in one step. It is never contacted in “Bring your own app” mode unless you use one-click Slack.
* When a host connects or reconnects a calendar, the plugin sends your site address, the host’s display name, a one-way hash identifying the host connection, a random verification code, and your J6 Connect key if you entered one. The broker completes the Google or Microsoft sign-in and hands the tokens back to your site. It does not store calendar tokens.
* When an access token expires, the plugin sends the host’s refresh token to the broker to get a new access token. The refresh token is not stored by the broker.
* When you view the Team & Calendars screen, the plugin checks the broker’s status and your key’s seat count (cached for 5 minutes). When a host is disconnected or removed, it tells the broker to free that seat.
Terms: https://j6venture.com/terms — Privacy: https://j6venture.com/calendar-by-j6venture/privacy-policy — Refunds: https://j6venture.com/refund-policy/
Google Calendar and Google sign-in (Google)
Used when a host connects a Google account. The plugin exchanges sign-in codes and refreshes tokens (oauth2.googleapis.com), reads the host’s name, email and photo (openidconnect.googleapis.com), checks free/busy times, and creates, updates and deletes calendar events with a Google Meet link (www.googleapis.com). Invitee name, email, meeting time and any notes are included in the calendar event.
Terms: https://policies.google.com/terms — Privacy: https://policies.google.com/privacy
Microsoft Outlook calendar and sign-in (Microsoft)
Used when a host connects a Microsoft account. The plugin signs in and refreshes tokens (login.microsoftonline.com), reads the host’s profile and free/busy times, and creates, updates and deletes calendar events with an optional Teams link (graph.microsoft.com). Invitee name, email, meeting time and notes are included in the event.
Terms: https://www.microsoft.com/servicesagreement — Privacy: https://privacy.microsoft.com/privacystatement
Periskope (WhatsApp)
Used only if you connect Periskope under Messages. The plugin sends the recipient’s phone number and message text (and any attachment link) to send WhatsApp messages, and reads a contact’s recent WhatsApp conversation by phone number to show it on the contact card (api.periskope.app).
Terms: https://periskope.app/terms — Privacy: https://periskope.app/privacy
WhatsApp Business Cloud API (Meta)
Used only if you connect the official WhatsApp API under Messages. The plugin sends the recipient’s phone number and message or template content to graph.facebook.com.
Terms: https://www.whatsapp.com/legal/business-terms — Privacy: https://www.whatsapp.com/legal/privacy-policy
Email providers (Resend, SendGrid, Mailchimp Transactional, Amazon SES, or your SMTP server)
Used only if you choose one under Settings How email is sent. Each booking, reminder or CRM email (recipient, subject and message) is sent through the provider you pick: api.resend.com, api.sendgrid.com, mandrillapp.com, an Amazon SES SMTP endpoint (for example email-smtp.us-east-1.amazonaws.com), or the SMTP host you enter.
Resend — Terms: https://resend.com/legal/terms-of-service — Privacy: https://resend.com/legal/privacy-policy
SendGrid — Terms: https://www.twilio.com/en-us/legal/tos — Privacy: https://www.twilio.com/en-us/legal/privacy
Mailchimp Transactional — Terms: https://mailchimp.com/legal/terms/ — Privacy: https://www.intuit.com/privacy/statement/
Amazon SES — Terms: https://aws.amazon.com/service-terms/ — Privacy: https://aws.amazon.com/privacy/
Slack and Microsoft Teams
Used only if you add a Slack or Teams channel under Integrations or in a CRM automation. The plugin posts a short booking or contact notification (name, email, meeting time) to the incoming-webhook address you provide (hooks.slack.com, or your Teams/Power Automate webhook).
Slack — Terms: https://slack.com/terms-of-service — Privacy: https://slack.com/trust/privacy/privacy-policy
Microsoft — Terms: https://www.microsoft.com/servicesagreement — Privacy: https://privacy.microsoft.com/privacystatement
Webhooks you add (for example Zapier or Make)
Used only if you add a webhook endpoint. Booking and contact event data (such as name, email, phone, meeting time and answers) is sent to the address you enter. The terms and privacy policy of the service you choose apply.
Google Tag Manager, Google Ads and Meta Pixel
Used only if you enter a Tag Manager ID, Google Ads ID or Meta Pixel ID under Settings Conversions & tracking. The matching script is then loaded on the public booking page, and a conversion event is sent when a booking completes (www.googletagmanager.com, connect.facebook.net, and www.facebook.com for the Pixel’s no-JavaScript fallback).
Google — Terms: https://policies.google.com/terms — Privacy: https://policies.google.com/privacy
Meta — Terms: https://www.facebook.com/legal/terms — Privacy: https://www.facebook.com/privacy/policy/
Host profile photos
When building a link-preview image for a host’s booking page, the plugin downloads that host’s profile photo from the address their Google or Microsoft account provided (for example lh3.googleusercontent.com). Nothing about the visitor is sent.
Blocks
This plugin provides 1 block.
- Booking calendar
Installation
- Install from Plugins Add New, or upload the ZIP, then activate it.
- Go to Calendar & CRM Team & Calendars and choose how hosts connect their calendars: bring your own app (free, guided wizard) or one-click Connect.
- Connect each host’s Google or Outlook calendar.
- Set hours under Availability, create meetings under Meeting Types, and share your booking page (
yoursite.com/calendarby default).
If you bring your own Google app, publish its OAuth consent screen to Production. In Testing mode Google expires the connection every 7 days.
Moving from “Calendar by J6 Venture”
Calendar and CRM by J6 is the new name for Calendar by J6 Venture and uses the same data. Deactivate the old plugin, then activate this one. Your bookings, contacts and settings carry over. Do not delete the old plugin while its “Remove all data on uninstall” setting is on.
FAQ
-
Is the plugin free?
-
Yes. Every feature in the plugin works for free with “Bring your own app”. The optional one-click Connect service, which saves you creating your own Google or Microsoft app, is a paid service run by J6 Venture.
-
Does my data go through J6 Venture’s servers?
-
Bookings, contacts, availability and calendar tokens are stored in your own database. With “Bring your own app” nothing is sent to J6 Venture. With one-click Connect, only the sign-in and token-refresh steps pass through J6’s broker, which does not store tokens. See “External services” for details.
-
Where can I get help?
-
Guides and answers are in the Help & Knowledge Base at https://j6venture.com/calendar-by-j6venture/help/. For questions, use this plugin’s support forum on WordPress.org, or https://j6venture.com/calendar-by-j6venture/support/.
-
Which Google permissions does it request?
-
Calendar events and free/busy, plus basic profile (name, email, photo). It never asks for Gmail or other scopes.
-
Do I need WhatsApp to use it?
-
No. WhatsApp is optional. Booking, email reminders and the CRM work without it.
-
What happens if a host isn’t connected to a calendar?
-
The booking is still saved and the invitee is emailed. The calendar event is created once that host connects.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Calendar and CRM by J6” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Calendar and CRM by J6” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.1.29
- The sign-in window now stays open a few seconds longer when a connection can’t be completed, so the reason is easy to read before it closes.
2.1.28
- Fixed the sign-in window sometimes showing the connection message with “+” signs where spaces should be (e.g. “One-click+Connect+is+a+paid…”). The reason now reads as normal text.
2.1.27
- Clearer one-click Connect errors: if a connection can’t be completed — for example when a J6 Connect key is needed — the reason is now shown in plain language on the Team & Calendars screen (and in the sign-in window), instead of a generic “couldn’t finish connecting”. The screen points you straight to activating a key or switching to the free “bring your own app” method.
2.1.26
- Plugin review fixes: removed the Google Tag Manager container option (the booking page now supports only specific first-party conversion tags — a Google Ads conversion and a Meta Pixel — each firing a fixed set of events defined in the plugin, with no tag-manager container or user-supplied script). Aligned the text domain to the plugin slug. Hardened input handling on the client-IP read used for rate limiting. No changes to your existing bookings, contacts or settings.
2.1.25
- Messaging Automation now has a bulk CSV import: create many WhatsApp, SMS and email-reminder messages in one upload. Every row is checked before anything is saved — an invalid channel, an unrecognised “when”, a bad reminder time, or a mistyped {variable} is flagged with a plain-language fix (e.g. “{customer_name} isn’t a valid variable — did you mean {invitee_name}?”), and messages that already exist are skipped so re-uploading is safe. Includes a downloadable CSV template and a ready-made ChatGPT / Claude prompt that writes the file for you from a plain-English description.
2.1.24
- Security hardening from a full penetration-style audit: the email-verification step no longer lets an unauthenticated visitor probe whether a given email is an existing customer (the anti-abuse rate limit now applies before that check), and the host magic-link login now correctly enforces its hourly rate limit so a known host address can’t be flooded with login emails. No functional change for normal use.
2.1.23
- Security: saved third-party keys and secrets (SMTP password, payment webhook secrets, WhatsApp/Periskope tokens, Google/Microsoft client secrets) are now encrypted at rest in the database, with the encryption key derived from your site’s own WordPress security salts. Existing saved secrets keep working and are re-encrypted the next time you save that field. No configuration needed.
2.1.22
- Faster loads and a fix for stale screens: the contacts list now loads its records and its settings in parallel (with the settings cached for a few minutes), so the CRM paints almost instantly on repeat visits, and page changes/sorts fetch only the rows they need. Admin assets are now cache-busted automatically on every change, so new versions show up without a hard refresh. Added database indexes behind the contacts list for faster sorting and filtering on larger lists, and hardened outbound webhook/integration URLs against internal-network requests.
2.1.21
- Smoother WhatsApp conversations: a background refresh now updates just the message thread in place instead of rebuilding the whole record, and opening a contact / switching tabs / saving a field no longer re-renders the contacts table hidden behind the open record. Long threads and quick tab-switching feel noticeably snappier.
2.1.20
- Faster contact record: it now opens instantly from data already on screen (no loading spinner), and editing a field, saving a note, or deleting a contact no longer re-downloads the whole list — the change is applied in place. Sending several WhatsApp messages quickly no longer stacks up background refreshes.
- Faster server: contact list, CSV export and the bookings API no longer make a separate database lookup per row for owner/host names (they’re cached per request), and settings are merged once per request instead of repeatedly.
- Cleaner Profile: the edit (pencil) icon now appears only when you hover a card, instead of sitting on every card — the whole card is still click-to-edit.
2.1.19
- The Send button on a WhatsApp/email message now stays disabled through the whole send (until the server replies) and is greyed whenever the box is empty. After a message sends, the composer clears and Send greys out — so a quick second click can’t fire a duplicate. It re-enables as soon as you type again.
2.1.18
- Opening a contact no longer “jumps” — the full-page record now fades in cleanly instead of sliding/scaling.
- Fields & stages now warns you if you close it with unsaved changes, so adding owners, stages or fields and then clicking Cancel/× (or outside the box) can’t silently lose your edits.
2.1.17
- You can now add lead Owners who don’t need a calendar or booking page — closers, setters, back-office team. Add them under Fields & stages Owners (name, optional email), and they appear everywhere you assign a lead owner: the contact record, the add-contact form, the owner filter, and CSV import (owners in your file match these people by name or email too). Your booking hosts are still owners automatically.
2.1.16
- Deleting a pipeline stage that still has contacts now asks where those contacts should go — move them to another stage, or clear their stage — instead of silently stranding them on a stage that no longer exists. (Renaming a stage already moves its contacts automatically.)
2.1.15
- Contact record: no more “jump”. Opening, switching tabs, saving a field, or a background WhatsApp refresh no longer replays the modal’s entrance animation — only the pane content crossfades, and only when you actually change tabs. Each tab (Profile, Activity, WhatsApp, Email, the summary rail) keeps its scroll position across saves and refreshes.
- The WhatsApp conversation now opens at the newest message (bottom) and stays there as it refreshes, and the WhatsApp tab is disabled (greyed) when WhatsApp isn’t connected.
- Sending an email or WhatsApp message now shows a spinner and disables the send button until it finishes, so a slow send can’t be clicked several times.
- Restored the full Contacts pager — First « ‹ 1 2 3 … › » Last, with “Viewing X–Y of Z” — always visible with the total count.
2.1.14
- CSV import stage matching now recognises common sales synonyms — “Closed Won”/”Deal Won” suggests your existing “Won” stage, “Closed Lost”/”Dead” suggests “Lost”, “New Lead”/”Fresh”/”Open” suggests “New” — so imports stop creating near-duplicate stages. Suggested matches are clearly labelled and you can still change or add any of them.
2.1.13
- CSV import is smarter and safer: a live preview on the review step shows how many contacts will be added, updated or left out before you commit; you can now map an Owner column (matched to your team by name or email) or assign all imported contacts to one team member; and stage matching now covers every stage column, collapses spacing/case variants, and no longer drops very long stage names.
- CSV import now imports a row on whichever of email/phone is valid instead of rejecting the whole row over one bad cell; accepts .tsv and tab-separated .txt files; lists which columns won’t be imported; shows several sample values per column; and defaults to the safest “merge” behaviour for existing contacts.
- Import wizard polish: the Stages step is now a real step in the progress bar, tighter copy throughout, and smoother spacing, motion and dark-mode styling.
2.1.12
- CSV import now has a Stages step: when your file’s stage values differ from your pipeline (e.g. “Closed Won” vs your “Won”), match each one to an existing stage, add it as new, or leave it empty — so importing never creates duplicate stages.
2.1.11
- The contact name in the record header now uses the standard interface typeface (IBM Plex Sans).
2.1.10
- The contact record now has a right-hand panel: quick actions (Call, WhatsApp, Email) and an at-a-glance summary (stage, owner, last touch, bookings, when added) that stays with you on the Profile and Activity tabs. WhatsApp and Email stay full-width for messaging.
2.1.9
- Polished the contact record to the J6 design system: the name is now set in the brand serif, the active tab and the primary Save carry the lime accent, and editing a field shows a lime highlight. Buttons are pill-shaped and the edit affordance is clearer.
- Bookings now shows active vs cancelled honestly (e.g. “None active · 1 cancelled”) instead of counting cancelled meetings. Clearer wording throughout, and the contact modal now animates in with a subtle save confirmation.
- Insights toolbar (date range, meeting-type filter, Export CSV) now sits on one line with the filters and Export on the right.
2.1.8
- The contact record is now a full-page view that opens on Profile, and every field edits in place — click a value (or its pencil) to change it. Dropdowns, dates and yes/no fields save the moment you choose; text fields have a Save button; tags and the assignee edit inline too.
- No more separate “Edit contact” step or ⋯ menu. Delete now sits in the top-right, set apart from Close and confirmed before anything is removed.
- Internal notes save automatically — no Save button. The Activity timeline is left-aligned for easier scanning.
2.1.7
- Rebuilt the contact view as full-width tabs — Profile, Activity, WhatsApp, Email and Notes — so each does one job. Profile shows the whole record cleanly; contact Edit/Delete live there.
- WhatsApp and Email now work like a real inbox: a full-height conversation and a compact compose bar with Send inside it (press Enter to send), a growing box, emoji, templates, insert-field and file attachments that send as real media.
- Editing is now a full-screen form instead of a narrow pop-up — or edit a field in place: click any value on the Profile tab (or its pencil) to change it and save without leaving the record.
2.1.6
- Redesigned the contact detail view: it now opens on an Activity timeline (created, stage, emails, bookings) instead of a large empty WhatsApp panel. WhatsApp, Email and Note are tabs — WhatsApp looks like WhatsApp and each channel has its own composer with templates and formatting.
- Person custom fields are now a searchable dropdown with initials avatars, so you pick a team member instead of retyping a name.
- Contact detail values wrap fully instead of being cut off.
- All admin screens use the full window width consistently; forms and data-dense cards keep a comfortable reading width on large monitors.
2.1.5
- Every admin screen now uses the full window width, like Contacts — so moving between screens no longer shifts the layout. Forms keep a comfortable reading width so fields don’t stretch on wide monitors.
2.1.4
- Contacts table: a horizontal scrollbar now sits on top of the table (so you don’t have to scroll to the bottom to find it), and you can drag column edges to resize them — your widths are remembered.
- Import is more precise: impossible dates (like Feb 31) are skipped instead of stored, and a stage in your file matches an existing one regardless of capitalisation or extra spaces.
- Adding a field or stage now scrolls to and focuses the new row.
2.1.3
- Import now creates any pipeline stages your file uses (so a “Stage” column like Lost / Won / Fresh is kept, not dropped).
- Import reads human date formats — “Monday, August 17, 2026”, 17/08/2026, Aug 17 2026 — into date fields correctly.
- New custom field type: Person (for an assignee, owner or closer), with your team’s names suggested as you type.
- Large imports are more reliable: smaller batches, an automatic retry, and if one batch still fails the rest keep going (the failed rows are listed in the rejects file to re-import).
2.1.2
- The contact card now opens large, so the details and the WhatsApp conversation are easy to read.
- Fixed the contact’s name being slightly clipped at the top of the card.
2.1.1
- Contacts now uses the full screen width, and the table scrolls sideways when you have many columns instead of squeezing them together.
- Fixed dialogs jumping back to the top when you add a field or stage, or change an option — they now keep your scroll position.
- Import: removed a stray horizontal scrollbar on the “Map columns” step.
2.1.0
- New: import contacts from a CSV. A guided wizard walks you through Upload Map columns Review: it auto-matches your columns to Name, Email, Phone, Stage, Tags, Notes and any custom fields, and you can adjust every mapping.
- You choose how existing contacts are handled — Update (overwrite the mapped fields), Merge (only fill in blanks), or Skip.
- Rows with no email or phone, or an invalid email/phone, are skipped and downloaded as a CSV with a reason for each, so you can fix and re-import. Empty optional fields import fine. Automations never fire on import.
2.0.6
- Automation dialog: the trigger options are now equal height and the dialog is wider, so it’s easier to read and set up.
- Spacing pass across every dialog — the optional condition, reminder channels, session roster and other blocks now sit at even, uncramped gaps.
2.0.5
- CRM automations: new trigger — run an automation when a contact’s custom field value changes to a value you choose (for example, when “Plan” becomes “Premium”).
- CRM automation editor redesigned with clear Trigger and Action tabs, and only the selected trigger’s inputs are shown — easier to set up.
- Spacing polish across the admin dialogs: clearer gaps between options, tighter confirm dialogs, and better alignment on small screens.
2.0.4
- Contacts: the empty-state “Add contact” button is now the primary (green) button with its icon and label on one line, and the duplicate header button is hidden while it shows — one clear call to action on a fresh, empty list.
2.0.3
- CRM automations can now run only when a chosen contact custom field holds a chosen value (for example, only when “Plan” is “Premium”). Dropdown and date custom fields are supported.
- Booking message automations can now send only when a booking answered a specific multiple-choice question a certain way (for example, only when “What plan?” is “Premium”). Applies to confirmation, reminder, cancellation and reschedule messages, and can be scoped to one event type.
- Contacts: the “Columns” menu no longer gets clipped on short lists and scrolls when you have many custom-field columns.
2.0.2
- The optional “Powered by J6 Venture” credit is now off by default; enable it in Settings Page appearance if you want it.
- Documentation: clarified that every feature is free and fully functional in “Bring your own app” mode, and that the optional J6 Connect key only pays for J6 Venture’s external one-click sign-in service. Expanded the external-services list and corrected outdated links.
2.0.1
- One-click Connect now runs on the branded J6 domain connect.j6venture.com instead of the temporary worker address.
- The “Powered by J6 Venture” credit remains a setting you can turn off in Settings Page appearance.
2.0.0
- Renamed to Calendar and CRM by J6, now published on WordPress.org.
- The “Powered by J6 Venture” credit on the booking page, emails and calendar events is a setting you can turn off in Settings Page appearance. Turn it off and emails show your own logo or site name at the top instead.
- The team and host screens are always available. One-click Connect remains an optional paid service, and the service itself decides whether a connection is allowed.
- Fonts are now bundled with the plugin instead of loaded from Google Fonts, so the booking page no longer contacts a font CDN.
- Booking-page scripts and styles, including optional tracking tags, are loaded through the standard WordPress script and style functions.
- Database queries use prepared identifiers throughout, and file handling uses the WordPress upload and filesystem APIs.
1.90.0
- Booking page: an on-brand language switcher, and selected dates and times follow your button colour.
1.84.0 – 1.89.0
- New built-in CRM: contacts, pipeline stages, custom fields, lead owner, saved columns, a two-pane contact card with the WhatsApp conversation, one-time sends, and CRM automations.
1.0.0 – 1.83.0
- Booking pages, multi-host Google and Outlook sync, reminders, WhatsApp messaging, insights, embeds, payment links, recurring and group events, and five languages.
