{"id":370868,"date":"2026-10-09T10:39:18","date_gmt":"2026-10-09T10:39:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kinto-capture\/"},"modified":"2026-10-09T10:38:44","modified_gmt":"2026-10-09T10:38:44","slug":"keyset-cart-lead-capture","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/keyset-cart-lead-capture\/","author":23559135,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.3","stable_tag":"0.1.3","tested":"7.1.3","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Keyset Cart Lead Capture","header_author":"Keyset","header_description":"Consent-first guest checkout email capture for WooCommerce \u2014 a calm \"save your cart?\" prompt that fires only on explicit opt-in.","assets_banners_color":"7f8885","last_updated":"2026-10-09 10:38:44","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/donate.stripe.com\/cNi4gAchQcB24eW7fO0RG01","header_plugin_uri":"https:\/\/kinto.build\/capture","header_author_uri":"https:\/\/kinto.build\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":81,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.3":{"tag":"0.1.3","author":"kintobuild","date":"2026-10-09 10:38:44","revision":3736421}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3736421,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3736421,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3736421,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3736421,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3736421,"resolution":"1","location":"assets","locale":"","width":1814,"height":1201},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3736421,"resolution":"2","location":"assets","locale":"","width":2890,"height":1644},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3736421,"resolution":"3","location":"assets","locale":"","width":2890,"height":1634},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3736421,"resolution":"4","location":"assets","locale":"","width":2890,"height":1634}},"screenshots":{"1":"The prompt under Add to Cart on the shop page, with the consent checkbox unticked.","2":"The Keyset dashboard in WordPress admin, showing the lifetime and this-month capture counts.","3":"The Leads table, showing the consent records, the search box and the CSV export button.","4":"The Settings screen: the optional Keyset glyph and a live preview of the prompt."}},"plugin_section":[],"plugin_tags":[15962,20011,1030,243450,286],"plugin_category":[45],"plugin_contributors":[285323],"plugin_business_model":[],"class_list":["post-370868","plugin","type-plugin","status-publish","hentry","plugin_tags-abandoned-cart","plugin_tags-consent","plugin_tags-email-capture","plugin_tags-guest-checkout","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kintobuild","plugin_committers-kintobuild"],"banners":{"banner":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/banner-772x250.png?rev=3736421","banner_2x":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/banner-1544x500.png?rev=3736421","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/icon-128x128.png?rev=3736421","icon_2x":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/icon-256x256.png?rev=3736421","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/screenshot-1.png?rev=3736421","caption":"The prompt under Add to Cart on the shop page, with the consent checkbox unticked."},{"src":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/screenshot-2.png?rev=3736421","caption":"The Keyset dashboard in WordPress admin, showing the lifetime and this-month capture counts."},{"src":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/screenshot-3.png?rev=3736421","caption":"The Leads table, showing the consent records, the search box and the CSV export button."},{"src":"https:\/\/ps.w.org\/keyset-cart-lead-capture\/assets\/screenshot-4.png?rev=3736421","caption":"The Settings screen: the optional Keyset glyph and a live preview of the prompt."}],"raw_content":"<!--section=description-->\n<p><strong>Shoppers add to cart and vanish before checkout.<\/strong> Keyset catches their email at the moment of intent \u2014 consent-first and under 8 KB. Free, with no lead cap, no forced branding, and nothing locked.<\/p>\n\n<p><strong>Most abandoned cart plugins don't capture abandoned carts. They capture abandoned checkouts<\/strong> \u2014 they only fire once a shopper has already reached the checkout page and started filling it in. By then most guests are long gone. Keyset meets the shopper earlier, at Add to Cart, where intent is highest and nothing else is listening.<\/p>\n\n<p>Many capture plugins grab emails through silent keystroke logging. Keyset refuses to. Nothing is captured without a clear, unchecked-by-default yes \u2014 and every lead carries a consent record you can stand behind.<\/p>\n\n<h4>Abandoned cart vs. abandoned checkout \u2014 why it matters<\/h4>\n\n<p>Roughly 70% of carts never become orders. The plugins that promise to \"recover abandoned carts\" almost all wait for the checkout page to load before they capture anything \u2014 so they only ever see the shoppers who were already going to check out. Keyset fires the moment a guest clicks <strong>Add to Cart<\/strong>: peak purchase intent, and the point where hesitation, distraction, and second-guessing quietly cost you the sale. It shows a calm prompt, fires only on an explicit opt-in, stores every lead in your own store's database, and hands it to the email tool you already use. Behavioral research on cart abandonment and digital nudging points the same way: meet the shopper who has signalled intent earlier, and you keep more of it \u2014 with consent, never a dark pattern.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Consent-first, always.<\/strong> An explicit, unchecked-by-default opt-in \u2014 no silent capture, no pre-ticked boxes. Every lead comes with a consent record: the exact text shown, a timestamp, and the page.<\/li>\n<li><strong>Unlimited, forever.<\/strong> No lead cap and no trial. Capture, consent records, CSV export and deletion are free and uncapped, forever.<\/li>\n<li><strong>Your leads, your database.<\/strong> Leads are stored locally in your own WooCommerce install. We host nothing. Export to CSV anytime.<\/li>\n<li><strong>Unbranded by default.<\/strong> The prompt carries no logo and no \"powered by\" line. If you want to help other store owners find Keyset, you can switch on a small glyph. It's off unless you turn it on, and it never links anywhere.<\/li>\n<li><strong>Faster checkout.<\/strong> Captured name and email prefill the checkout contact fields \u2014 a genuine benefit for the shopper, not just for you. They can still edit before they buy.<\/li>\n<li><strong>Lightweight by design.<\/strong> Loads only on product and shop pages, under 8 KB, no jQuery, no bloat. It answers the one complaint every merchant has about capture plugins: they slow the whole site down.<\/li>\n<li><strong>Block-checkout compatible.<\/strong> Works with the modern WooCommerce block checkout and the classic one, from day one \u2014 no console errors, no layout breakage.<\/li>\n<li><strong>No lock-in.<\/strong> Hands leads to the email tool you already use \u2014 Keyset never sends on your behalf. Delete a lead, or all of them, whenever you like.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>You finish the one-minute setup.<\/strong> Review the consent sentence and your privacy-policy link, then click \"Turn on capture.\" Shoppers see nothing until you do.<\/li>\n<li><strong>A guest adds to cart.<\/strong> A shopper browses, clicks Add to Cart, and a calm prompt offers to save their cart \u2014 inline, dismissible, never blocking the buy.<\/li>\n<li><strong>They opt in, with consent.<\/strong> They leave an email (name optional) and tick a clear consent box. The lead is saved to your own database with a full consent record.<\/li>\n<li><strong>Checkout gets faster.<\/strong> Their details prefill at checkout, so buying is quicker \u2014 and if they leave, you hold a consented lead you actually own.<\/li>\n<\/ol>\n\n<h4>Honest by default<\/h4>\n\n<p>We don't send marketing email, we don't host your data, we don't put our name on your store unless you ask us to, and we don't claim to make your store \"GDPR compliant.\" We provide consent-first <em>capture<\/em> \u2014 a clear opt-in, a real consent trail, and full control over deletion \u2014 and we say exactly that. Trust is a feature, not a footnote.<\/p>\n\n<h4>Free, with no catch<\/h4>\n\n<p>Most free plugins come with a catch. This one doesn't: <strong>unlimited captures, no watermark, nothing held back<\/strong>. Everything in the free plugin works for everyone, and capture, consent records, CSV export and deletion stay free forever.<\/p>\n\n<p>Missing something? Tell us from the plugin's <em>Help shape Keyset Pro<\/em> form. We read every request, reply personally, and let you know when the thing you asked for ships. What we build next comes from what you ask for.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to one external service, and only when the site admin chooses to use it.<\/p>\n\n<p><strong>Feature-request form (\"Help shape Keyset Pro\").<\/strong> When an admin fills in the form in the plugin's admin screen and clicks send, the plugin sends the email address they enter, their message, and the plugin version to Keyset at kinto.build. Nothing is sent automatically, and no shopper or lead data is ever sent.<\/p>\n\n<ul>\n<li>Service provider: Keyset \u2014 https:\/\/kinto.build<\/li>\n<li>Privacy policy: https:\/\/kinto.build\/privacy<\/li>\n<\/ul>\n\n<h3>Source Code<\/h3>\n\n<p>The JavaScript and CSS in the <code>build\/<\/code> folder are compiled. Their full, human-readable source ships with the plugin in the <code>src\/<\/code> folder:<\/p>\n\n<ul>\n<li><code>src\/storefront\/<\/code> \u2014 the \"save your cart?\" prompt shown to shoppers (TypeScript, compiled to <code>build\/storefront.js<\/code> and <code>build\/storefront.css<\/code>).<\/li>\n<li><code>src\/admin\/<\/code> \u2014 the plugin admin screens (TypeScript + React, compiled to <code>build\/admin.js<\/code> and <code>build\/admin.css<\/code>).<\/li>\n<\/ul>\n\n<p>The build uses the standard WordPress toolchain, <code>@wordpress\/scripts<\/code> (webpack). The build configuration (<code>package.json<\/code>, <code>package-lock.json<\/code>, <code>webpack.config.js<\/code>, <code>tsconfig.json<\/code>) is included in the plugin. To rebuild the assets:<\/p>\n\n<ol>\n<li>Install Node.js 22 or later.<\/li>\n<li>In the plugin folder, run <code>npm ci<\/code> to install the exact build dependencies.<\/li>\n<li>Run <code>npm run build<\/code>. The compiled files are written to <code>build\/<\/code>.<\/li>\n<\/ol>\n\n<p>Use <code>npm run start<\/code> to rebuild automatically while you edit files in <code>src\/<\/code>.<\/p>\n\n<p>The two bundled font files (Hanken Grotesk and JetBrains Mono, both under the SIL Open Font License) are emitted unchanged by webpack from <code>src\/<\/code> into <code>build\/fonts\/<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Install and activate Keyset Cart Lead Capture.<\/li>\n<li>Follow the short setup flow \u2014 capture goes live when you finish it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20capture%20emails%20before%20checkout%20in%20woocommerce%3F\"><h3>How do I capture emails before checkout in WooCommerce?<\/h3><\/dt>\n<dd><p>Install and activate Keyset, then finish the one-minute setup and click \"Turn on capture.\" From then on, when a guest clicks Add to Cart, a calm consent-first prompt appears inline on the product or shop page, before they reach checkout. Anyone who opts in is saved to your own store's database as a consented lead, with a full consent record.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20an%20abandoned%20cart%20and%20an%20abandoned%20checkout%3F\"><h3>What's the difference between an abandoned cart and an abandoned checkout?<\/h3><\/dt>\n<dd><p>An abandoned <em>cart<\/em> is a shopper who added items and left \u2014 often without ever reaching the checkout page. An abandoned <em>checkout<\/em> is someone who got to checkout and started filling it in before leaving. Most \"recover abandoned cart\" plugins only capture the second group, because they don't fire until the checkout page loads. Keyset fires at Add to Cart, so it reaches the far larger group who leave before checkout.<\/p><\/dd>\n<dt id=\"is%20there%20a%20lead%20limit%20or%20a%20paid%20version%3F\"><h3>Is there a lead limit or a paid version?<\/h3><\/dt>\n<dd><p>No limit, ever. Capture is unlimited and everything in the free plugin works for everyone \u2014 no trial, no locked settings. There's no paid tier yet; if we add one, capture, consent records, CSV export and deletion stay free. If there's something you need that isn't here, tell us through the form in the plugin and we'll get back to you.<\/p><\/dd>\n<dt id=\"will%20my%20shoppers%20see%20your%20branding%3F\"><h3>Will my shoppers see your branding?<\/h3><\/dt>\n<dd><p>No. The prompt is unbranded by default. During setup we ask once whether you'd like to show a small Keyset glyph to help other store owners find the plugin. It's unticked, you can skip it, and it never links anywhere. You can switch it on or off in Settings with one click.<\/p><\/dd>\n<dt id=\"does%20this%20send%20marketing%20emails%20for%20me%3F\"><h3>Does this send marketing emails for me?<\/h3><\/dt>\n<dd><p>No. Keyset is the capture layer only. It collects consented leads and hands them to the email tool you already use \u2014 it never sends on your behalf. That's on purpose: one job, done well.<\/p><\/dd>\n<dt id=\"where%20is%20the%20captured%20data%20stored%3F\"><h3>Where is the captured data stored?<\/h3><\/dt>\n<dd><p>In your own WordPress\/MySQL database. We host nothing. You can export to CSV or delete leads \u2014 one or all \u2014 at any time.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20connect%20to%20any%20outside%20service%3F\"><h3>Does the plugin connect to any outside service?<\/h3><\/dt>\n<dd><p>Only if you use the \"Help shape Keyset Pro\" form. When you click send, it posts your email, your message and the plugin version to us at kinto.build. Nothing is sent otherwise, and shopper data never leaves your site.<\/p><\/dd>\n<dt id=\"does%20this%20make%20my%20store%20gdpr-compliant%3F\"><h3>Does this make my store GDPR-compliant?<\/h3><\/dt>\n<dd><p>No plugin can promise that, and we don't. What we provide is consent-first <em>capture<\/em>: an explicit, unchecked-by-default opt-in and a full consent record for every lead. We don't claim to make your entire store compliant \u2014 that depends on your wider setup \u2014 but the capture step is clean by design. Your legal compliance remains your responsibility.<\/p><\/dd>\n<dt id=\"does%20the%20prompt%20work%20with%20my%20theme%3F\"><h3>Does the prompt work with my theme?<\/h3><\/dt>\n<dd><p>The prompt hooks into standard WooCommerce add-to-cart markup: the single product form (classic and AJAX add-to-cart themes) and the shop\/archive grid buttons. It is tested on Storefront, Twenty Twenty-Four, Astra, Blocksy, and Botiga, plus common mini-cart drawer plugins. A theme that replaces WooCommerce's markup or intercepts clicks with its own early handlers may bypass the prompt \u2014 when that happens the shopper's add-to-cart works exactly as before; the prompt simply doesn't show. Nothing ever blocks the buy flow.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20woocommerce%20block%20checkout%3F\"><h3>Does it work with the WooCommerce block checkout?<\/h3><\/dt>\n<dd><p>Yes. It's compatible with both the modern block checkout and the classic one from day one \u2014 no console errors, no layout breakage \u2014 and captured details prefill either.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20store%20down%3F\"><h3>Will it slow my store down?<\/h3><\/dt>\n<dd><p>No. The script loads only on product and shop pages, weighs under 8 KB, and uses no jQuery. It answers the one complaint every merchant has about capture plugins.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Ship the human-readable source (<code>src\/<\/code>) and build configuration for the compiled JavaScript and CSS, and document how to rebuild them in a new \"Source Code\" readme section, to meet a WordPress.org plugin review requirement. No functional changes.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Rename the plugin to \"Keyset Cart Lead Capture\" (previously \"Kinto Capture\") to meet a WordPress.org plugin review requirement. The display name, plugin slug\/text domain (keyset-cart-lead-capture), and internal identifiers change; there are no functional changes.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix Plugin URI and Author URI to point at the live kinto.build product and homepage (the previous GitHub URLs returned 404). No functional changes.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Capture guest emails at Add to Cart, before checkout. Consent-first, unlimited and free, under 8 KB. Leads stay in your own database.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370868"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kintobuild"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370868"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370868"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370868"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370868"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370868"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}