700,000+
May 25, 2026
February 12, 2018
Turn conversations into conversions
Joinchat is the most installed plugin for WhatsApp: a customizable floating button that turns your visitors into chats, leads and sales.
Built for conversion from the very first click: eye-catching CTAs, dynamic start messages, native WooCommerce integration and built-in analytics to measure every conversation.
🌍 Joinchat, the global leader in WhatsApp click to chat
🗺️ Present in more than 176 countries
🏆 #1 chat solution in:
🇦🇷 Argentina 🇨🇴 Colombia 🇧🇷 Brazil 🇪🇸 Spain 🇳🇱 Netherlands 🇲🇽 Mexico 🇨🇱 Chile 🇵🇪 Peru 🇵🇹 Portugal
Source: BuiltWith®
A complete WhatsApp conversion toolkit for WordPress, designed to capture more leads and close more sales.
Many companies lose their WhatsApp Business number for contacting customers first without consent. Joinchat flips the model: the visitor writes first, so every conversation starts aligned with WhatsApp’s official policies.
The result: your business number protected and your customers reaching out when they need to, not the other way around.
With Joinchat, you can unlock the full potential of WhatsApp’s “click to chat” feature.
Joinchat Free is just the start. Premium and AI unlock its full conversion potential.
👉 Get Joinchat Premium | 👉 Get Joinchat AI
You can change main settings on every Post, Page, Product or CPT and for Tag or Category archive pages. Edit your WhatsApp number, CTA, Start Message and Visibility options.
Use a balloon on the button to get the visitor’s attention. In this way, you ensure that you do not miss any important message you want to give them, surprise them in a less intrusive way.
CTAs with Rich Chat: multiple chat bubbles with links, buttons, images or random text. Encourage users to contact you with a welcome message, offering help or promotions and offers. Read more
Defines a pre-loaded initial message for when the user contacts via WhatsApp. Add context with our “Dynamic Variables” and you will know what page the visitor is coming from or what product they are looking at when they start the chat.
Opt-in is a users’ consent to receive messages from a business.
Write a text with the conditions under which the visitor contacts you (or other info that you consider important).
You can make it mandatory and disable contact until the user accepts it.
Set CTAs and Start Messages for shop page, product pages and for products on sale.
Add a WhatsApp Contact Button directly on your product page next to the “Add to cart” button or choose the best position, even on products without a price.
Add beautiful and customizable WhatsApp contact buttons in the Block Editor. You can define phone and initial message of the button or use the post/general Joinchat settings (ideal for Reusable Blocks).
Enable QR Code on desktop to allow your visitors to scan it and start messaging from their phone.
Use variables in your CTAs and Start Messages that change dynamically for each page:
Automatically send events to Google Analytics, Google Tag Manager and Facebook Pixel when the user opens WhatsApp.
"generate_lead" event"JoinChat" event"JoinChat" eventYou can also create your own custom events or add event parameters. View FAQs / Read more
Any element in your page can be a chat trigger, eg: it can launch WhatsApp from a link or show the Joinchat CTA when the user scrolls to the footer.
On page load (by url):
joinchat to show chat window. Can set delay in seconds, default is 0 (e.g. example.com/page/?joinchat=5)#joinchat to show chat window (e.g. example.com/page/#joinchat)On click:
"joinchat_app" direct launch WhatsApp"joinchat_open" opens Joinchat CTA"#whatsapp" direct launch WhatsApp"#joinchat" opens Joinchat CTASet custom phone and initial message for direct WhatsApp triggers:
data-phone="99999999"data-message="Only for this trigger message".On scroll (when element appears on screen):
"joinchat_show" opens Joinchat CTA (first time)"joinchat_force_show" opens Joinchat CTA (always)To be able to support all your users, wherever they are. Our plugin is compatible with WPML, Polylang and — 🆕 — TranslatePress and also RTL languages are supported.
You choose a color and we customize the entire visual theme of the widget. With Dark Mode display the chat window with dark colors and white text. From settings you can activate it or leave it automatic and detects devices’ configuration.
Only load what need when needed. Joinchat is lightweight and follow best coding practices. Use vanilla JavaScript without dependencies, deferred scripts and lazy load of styles to prevent render-blocking.
See Tests Report and Speed Score.
Joinchat integrates with all major Visual Editors and Page Builders and will not appear when editing a page.
Supported editors: Beaver Builder, Brizy Page Builder, Elementor, Oxygen Builder, Page Builder by SiteOrigin, Thrive Architect, Visual Composer and WP Page Builder.
Joinchat can be used without any cookies. But to automatically display the CTA, two cookies are necessary. They are first-party cookies and don’t collect personal data.
Joinchat integrates with WordPress’s Privacy Policy Guide and suggests the necessary text.
Fully extensible, with lots of filters and actions to extend its functionality or change behavior.
creame-whatsapp-me folder to the /wp-content/plugins/ directory.You can change the position of the button so that nothing covers it by adding this CSS in Joinchat Settings > Advanced > Custom CSS:
.joinchat { z-index:999999; }
Higher values of z-index are above, the default value is 9000.
If you need to move up:
/* always */
.joinchat { --bottom: 60px; }
/* mobile only */
@media (max-width: 480px), (orientation: landscape) and (max-height: 480px) {
.joinchat { --bottom: 60px; }
}
You can change the button size by adding this CSS in Joinchat Settings > Advanced > Custom CSS:
/* always */
.joinchat { --s: 50px; }
/* mobile only */
@media (max-width: 480px), (orientation: landscape) and (max-height: 480px) {
.joinchat { --s: 40px; }
}
For WooCommerce Product Button you can change size with:
.joinchat__woo-btn { --s: 50px; }
Joinchat does not provide any shortcodes, but you can easily link to WhatsApp in two ways:
#whatsapp (open WhatsApp directly) or #joinchat (show chat window).#whatsappjoinchat_app (open WhatsApp directly) or joinchat_open (show chat window).<img src="contact.jpg" class="joinchat_open" alt="Contact">This works with your phone settings and message with dynamic variables, even on pages without Joinchat visible.
For custom direct WhatsApp links you can add data-phone and data-message attributes.
e.g.: <a href="#whatsapp" data-phone="99999999" data-message="I want to chat">Chat now!</a>
Joinchat uses International Telephone Input library to facilitate and validate the introduction of the phone number in the format of each country. If you have problems with your phone number or you want to write it directly without any changes you can disable it with this filter (remember follow WhatsApp guidelines):
add_filter( 'joinchat_enhanced_phone', '__return_false' );
By default Joinchat settings can only be edited by users with manage_options capability (administrator).
You can change the required capability with the filter "joinchat_capability".
// e.g. allow shop managers:
add_filter( 'joinchat_capability', function(){ return 'manage_woocommerce'; } );
// e.g. allow editors:
add_filter( 'joinchat_capability', function(){ return 'edit_pages'; } );
Since v4.4 Joinchat menu is placed as direct menu in your wp-admin but you can change it with the filter "joinchat_submenu":
// Show as submenu under Settings (also require "manage_options" capability)
add_filter( 'joinchat_submenu', '__return_true' );
The block editor evolves quickly and errors can occur that we have not anticipated.
If you have any errors with Gutenberg and Joinchat or simply prefer the old Joinchat metabox you can use this filter:
add_filter( 'joinchat_gutenberg_sidebar', '__return_false' );
Joinchat settings are saved in your site’s main language. For other languages translation go to WPML/Polylang Settings > String translations, filter strings group by “Joinchat” and update the strings for each language.
Joinchat since 5.1 can detect multiple destinations in Google Tag and send events to all of them.
Joinchat sends a custom event when user launch WhatsApp.
If Google Analytics 4 (gtag.js) is detected, use the recommended 'generate_lead' event:
gtag('event', 'generate_lead', {
event_category: 'JoinChat',
event_action: 'whatsapp: 99999999999',
event_label: destination_url,
chat_channel: 'whatsapp',
chat_id: '99999999999',
is_mobile: 'yes' | 'no',
});
If your site don’t have standard names for data layer (‘dataLayer’) you can set your custom names with this PHP filter. Also can set a different event name for GA4:
// Rename GA4 event / Rename dataLayer name
add_filter( 'joinchat_get_settings', function( $settings ){
$settings['ga_event'] = 'myGA4Event';
$settings['data_layer'] = 'dataLayerCustom';
return $settings;
} );
// Disable GA4 event
add_filter( 'joinchat_get_settings', function( $settings ){
$settings['ga_event'] = false;
return $settings;
} );
Joinchat is compatible with plugins MonsterInsights – Google Analytics Dashboard for WordPress, Google Tag Manager for WordPress and PixelYourSite custom names.
Joinchat sends a 'JoinChat' event if GTM is detected when user launch WhatsApp:
dataLayer.push({
event: 'JoinChat',
event_action: 'whatsapp: 99999999999',
event_label: destination_url,
chat_channel: 'whatsapp',
chat_id: '99999999999',
is_mobile: 'yes' | 'no',
page_location: current_url,
page_title: page_title,
});
Joinchat sends a 'JoinChat' custom event if Facebook Pixel is detected when user launch WhatsApp:
fbq('trackCustom', 'JoinChat', {
event_action: 'whatsapp: 99999999999',
event_label: destination_url,
chat_channel: 'whatsapp',
chat_id: '99999999999',
is_mobile: 'yes' | 'no',
page_location: current_url,
page_title: page_title,
});
Joinchat triggers custom events before launch WhatsApp 'joinchat:open' and before send analytics events 'joinchat:event'.
You can use them to extend them to your needs, add extra functions, cancel events or add extra parameters.
// e.g.: Send webhook to Zapier
jQuery(document).on('joinchat:event', function (event, params) {
jQuery.post('https://hooks.zapier.com/hooks/catch/123456/xxxxxx/', params );
});
// e.g.: Add user_is_logged param for GA4/GTM event
jQuery(document).on('joinchat:event', function (event, params) {
params.user_is_logged = document.body.classList.contains('logged-in') ? 'yes' : 'no';
});
Joinchat can be used without any cookies.
Depending on your Joinchat settings, two cookies may be needed. They are first-party cookies and don’t collect personal data.
joinchat_views is a visits counter to control when to show chat window.joinchat_hashes saves when a user has interacted with a CTA to prevent automatically show that CTA again.You can view in your Settings > Privacy > Policy Guide the suggested text by Joinchat.
See changelog.txt for older changelog
| Version | Download | Type |
|---|---|---|
| 6.2.3 | Download | Stable |
| 6.2.2 | Download | Stable |
| 6.2.1 | Download | Stable |
| 6.2.0 | Download | Stable |
| 6.1.3 | Download | Stable |
| 6.1.2 | Download | Stable |
| 6.1.1 | Download | Stable |
| 6.1.0 | Download | Stable |
| 6.0.10 | Download | Stable |
| 6.0.9 | Download | Stable |
| 6.0.8 | Download | Stable |
| 6.0.7 | Download | Stable |
| 6.0.6 | Download | Stable |
| 6.0.5 | Download | Stable |
| 6.0.4 | Download | Stable |
| 6.0.3 | Download | Stable |
| 6.0.2 | Download | Stable |
| 6.0.1 | Download | Stable |
| 6.0.0 | Download | Stable |
| 5.2.4 | Download | Stable |
| 5.2.3 | Download | Stable |
| 5.2.2 | Download | Stable |
| 5.2.1 | Download | Stable |
| 5.2.0 | Download | Stable |
| 5.1.8 | Download | Stable |
| 5.1.7 | Download | Stable |
| 5.1.6 | Download | Stable |
| 5.1.5 | Download | Stable |
| 5.1.4 | Download | Stable |
| 5.1.3 | Download | Stable |
| 5.1.2 | Download | Stable |
| 5.1.1 | Download | Stable |
| 5.1.0 | Download | Stable |
| 5.0.17 | Download | Stable |
| 5.0.16 | Download | Stable |
| 5.0.15 | Download | Stable |
| 5.0.14 | Download | Stable |
| 5.0.13 | Download | Stable |
| 5.0.12 | Download | Stable |
| 5.0.11 | Download | Stable |
| 5.0.10 | Download | Stable |
| 5.0.9 | Download | Stable |
| 5.0.8 | Download | Stable |
| 5.0.7 | Download | Stable |
| 5.0.6 | Download | Stable |
| 5.0.5 | Download | Stable |
| 5.0.4 | Download | Stable |
| 5.0.2 | Download | Stable |
| 5.0.1 | Download | Stable |
| 5.0.0 | Download | Stable |
| 4.5.20 | Download | Stable |
| 4.5.19 | Download | Stable |
| 4.5.18 | Download | Stable |
| 4.5.17 | Download | Stable |
| 4.5.16 | Download | Stable |
| 4.5.15 | Download | Stable |
| 4.5.14 | Download | Stable |
| 4.5.13 | Download | Stable |
| 4.5.12 | Download | Stable |
| 4.5.11 | Download | Stable |
| 4.5.10 | Download | Stable |
| 4.5.9 | Download | Stable |
| 4.5.8 | Download | Stable |
| 4.5.7 | Download | Stable |
| 4.5.6 | Download | Stable |
| 4.5.5 | Download | Stable |
| 4.5.4 | Download | Stable |
| 4.5.3 | Download | Stable |
| 4.5.2 | Download | Stable |
| 4.5.1 | Download | Stable |
| 4.5.0 | Download | Stable |
| 4.4.3 | Download | Stable |
| 4.4.2 | Download | Stable |
| 4.4.1 | Download | Stable |
| 4.4.0 | Download | Stable |
| 4.3.2 | Download | Stable |
| 4.3.1 | Download | Stable |
| 4.3.0 | Download | Stable |
| 4.2.0 | Download | Stable |
| 4.1.15 | Download | Stable |
| 4.1.14 | Download | Stable |
| 4.1.13 | Download | Stable |
| 4.1.12 | Download | Stable |
| 4.1.11 | Download | Stable |
| 4.1.10 | Download | Stable |
| 4.1.9 | Download | Stable |
| 4.1.8 | Download | Stable |
| 4.1.7 | Download | Stable |
| 4.1.6 | Download | Stable |
| 4.1.5 | Download | Stable |
| 4.1.4 | Download | Stable |
| 4.1.3 | Download | Stable |
| 4.1.2 | Download | Stable |
| 4.1.1 | Download | Stable |
| 4.1.0 | Download | Stable |
| 4.0.10 | Download | Stable |
| 3.2.3 | Download | Stable |
| 2.3.3 | Download | Stable |
| 1.4.3 | Download | Stable |
| Development | Download | Trunk |