{"id":398940,"date":"2026-11-06T11:30:02","date_gmt":"2026-11-06T11:30:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rockheron\/"},"modified":"2026-11-06T21:59:28","modified_gmt":"2026-11-06T21:59:28","slug":"rockheron","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rockheron\/","author":23518732,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"RockHeron","header_author":"Miotix","header_description":"See where your leads actually came from, and whether the ad platform's numbers match what your site recorded.","assets_banners_color":"7f88a6","last_updated":"2026-11-06 21:59:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rockheron.com","header_author_uri":"https:\/\/profiles.wordpress.org\/miotix\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":122,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"miotix","date":"2026-11-06 12:45:02","revision":3787940},"1.1.0":{"tag":"1.1.0","author":"miotix","date":"2026-11-06 21:59:28","revision":3788783}},"upgrade_notice":{"1.1.0":"<p>Fixes a privacy gap: a visitor who withdrew consent, or who has Do Not Track on, could still have a campaign attached to a form submission, because the cookie written while consent stood was still being read. Take this one. Also adds Excel export, puts your results into every export, and gives the Leads screen its own.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3787789,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3787789,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3787789,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3787789,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3787789,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3787789,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3787789,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3787789,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3787789,"resolution":"5","location":"assets","locale":"","width":1280,"height":800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3787789,"resolution":"6","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The dashboard. Sessions, visitors, goal completions and conversion rate, each with the previous period beside it, and where the visits came from.","2":"Leads. Every form submission and WooCommerce order with the campaign that introduced it. First touch, remembered for thirty days.","3":"Campaigns, each reported over its own dates: what the platform claimed, what this site recorded, and the gap between them. Pro.","4":"A report carrying your own name and logo, prepared for a client. Pro.","5":"Settings. White labeling, the weekly or monthly send, and every site you look after in one table. Pro.","6":"Tracked elements. What you asked to count, where it is counted, and what has been recorded so far."}},"plugin_section":[262246],"plugin_tags":[9067,20230,986,40003,25969],"plugin_category":[],"plugin_contributors":[269659],"plugin_business_model":[],"class_list":["post-398940","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-attribution","plugin_tags-campaign-tracking","plugin_tags-conversion-tracking","plugin_tags-lead-source","plugin_tags-utm-tracking","plugin_contributors-miotix","plugin_committers-miotix"],"banners":{"banner":"https:\/\/ps.w.org\/rockheron\/assets\/banner-772x250.png?rev=3787789","banner_2x":"https:\/\/ps.w.org\/rockheron\/assets\/banner-1544x500.png?rev=3787789","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rockheron\/assets\/icon-128x128.png?rev=3787789","icon_2x":"https:\/\/ps.w.org\/rockheron\/assets\/icon-256x256.png?rev=3787789","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-1.png?rev=3787789","caption":"The dashboard. Sessions, visitors, goal completions and conversion rate, each with the previous period beside it, and where the visits came from."},{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-2.png?rev=3787789","caption":"Leads. Every form submission and WooCommerce order with the campaign that introduced it. First touch, remembered for thirty days."},{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-3.png?rev=3787789","caption":"Campaigns, each reported over its own dates: what the platform claimed, what this site recorded, and the gap between them. Pro."},{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-4.png?rev=3787789","caption":"A report carrying your own name and logo, prepared for a client. Pro."},{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-5.png?rev=3787789","caption":"Settings. White labeling, the weekly or monthly send, and every site you look after in one table. Pro."},{"src":"https:\/\/ps.w.org\/rockheron\/assets\/screenshot-6.png?rev=3787789","caption":"Tracked elements. What you asked to count, where it is counted, and what has been recorded so far."}],"raw_content":"<!--section=description-->\n<p>Your ad platform counts its own results. RockHeron counts them on your site and\nputs the two numbers next to each other.<\/p>\n\n<p>It records which campaign introduced every form submission and every WooCommerce\norder, in your own database on your own hosting, then shows what the platform\nclaimed beside what your site actually recorded, so you can see the gap rather\nthan take a dashboard's word for it.<\/p>\n\n<p><strong>Lead source attribution<\/strong><\/p>\n\n<ul>\n<li>First touch attribution: the campaign that introduced a visitor is remembered for thirty days, and the first one keeps the credit<\/li>\n<li>Source, medium, campaign, term and content, plus which parameter identified them<\/li>\n<li>Six form plugins: Contact Form 7, WPForms, Gravity Forms, Elementor Forms, Fluent Forms and WooCommerce<\/li>\n<li>WooCommerce orders, read from WooCommerce's own order attribution rather than collected twice<\/li>\n<li>A leads table of every submission with the campaign behind it, broken down by source, medium and campaign<\/li>\n<\/ul>\n\n<p><strong>What else it records on your site<\/strong><\/p>\n\n<ul>\n<li>Visits, visitors and page views, with the previous period next to every number<\/li>\n<li>Goals: calls, emails, WhatsApp clicks, form sends, add to cart, or any element you name<\/li>\n<li>Clicks on any element you name by CSS selector, site wide or on chosen pages<\/li>\n<li>Elements seen on screen, video plays, scroll depth, outbound clicks, downloads, site searches<\/li>\n<li>Where visits come from: search, AI assistants, social, referral, campaigns, direct<\/li>\n<li>Devices, browsers, operating systems, countries, landing pages, top pages<\/li>\n<li>A live count of visitors in the last thirty minutes<\/li>\n<\/ul>\n\n<p><strong>Google data next to it<\/strong><\/p>\n\n<ul>\n<li>Google Site Kit is used automatically when installed, so you do not connect Google twice<\/li>\n<li>Without it, connect Analytics 4 directly using your own Google Cloud OAuth client<\/li>\n<li>Search Console clicks, impressions, CTR and average position when Site Kit is present<\/li>\n<li>Import past months from Google Analytics so the dashboard is not empty on day one<\/li>\n<li>Import sixteen months of Search Console history, by button with Site Kit or from the export file without<\/li>\n<li>Export any period as a CSV or an Excel file, with every card the site can produce and the results themselves in it, not just the cards left switched on<\/li>\n<li>The Leads screen has its own export, carrying that screen and nothing else<\/li>\n<li>Open a printable report the browser saves as a PDF, with the caveats carried into the file<\/li>\n<\/ul>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<ul>\n<li>No analytics cookies, and no IP address is ever stored<\/li>\n<li>The one cookie it does set is first party and holds campaign details only: no name, no email address, no telephone number, nothing typed into your form, no advertising click identifier<\/li>\n<li>Visitors are counted with a one way hash that changes daily<\/li>\n<li>Do Not Track and Global Privacy Control are respected<\/li>\n<li>Works with CookiePile, the WP Consent API, or any consent cookie you name<\/li>\n<li>Raw events are cleared on your own retention schedule while daily totals keep the history<\/li>\n<\/ul>\n\n<h3>Languages<\/h3>\n\n<p>Fully translated into Hebrew, with a right to left layout. The translation is\ndelivered by WordPress.org as a language pack rather than bundled in this zip,\nwhich is why <code>languages\/<\/code> holds only the POT file: a bundled catalog would\nshadow the pack and stop you receiving corrections. Any other language can be\nadded from that POT file, or contributed at\nhttps:\/\/translate.wordpress.org\/projects\/wp-plugins\/rockheron\/<\/p>\n\n<h3>External services<\/h3>\n\n<p>RockHeron contacts nothing on its own. Every connection below happens only\nbecause you connected an account or switched a setting on.<\/p>\n\n<p><strong>Google OAuth, Analytics 4 and Google Ads (optional, off until you connect them)<\/strong><\/p>\n\n<p>If you choose to connect Google directly, with your own Google Cloud OAuth\nclient, the plugin talks to Google from your server to read your own reports:<\/p>\n\n<ul>\n<li><code>accounts.google.com<\/code> - where your browser goes to approve the connection. Nothing is sent there by the plugin; you sign in to Google yourself.<\/li>\n<li><code>oauth2.googleapis.com<\/code> - exchanges the approval for an access token and refreshes it later. Sends your own OAuth client ID, client secret and the token.<\/li>\n<li><code>analyticsdata.googleapis.com<\/code> and <code>analyticsadmin.googleapis.com<\/code> - reads your Analytics 4 reports and property list. Sends the access token, the property ID and the date range and dimensions being requested.<\/li>\n<li><code>googleads.googleapis.com<\/code> - reads campaign spend and clicks, and only when you have entered a Google Ads customer ID and a Google approved developer token. Sends the access token, the developer token and the customer ID.<\/li>\n<\/ul>\n\n<p>These four read your figures in. Nothing recorded about your visitors or your\nleads goes out through them: no visit, no lead, no form entry, no email\naddress, no name, no IP address. <strong>That covers these four connections only, not\nthe Google tag below, which does send visitor data to Google.<\/strong><\/p>\n\n<p>With Google Site Kit, RockHeron reads through Site Kit on your own site and\nmakes no connection of its own.<\/p>\n\n<p><strong>Google tag (optional, off by default, and it does send visitor data to Google)<\/strong><\/p>\n\n<p>This runs in your visitors' browsers, not on your server, and it is the\nordinary Google tag. Switch on \"Inject the Google tag\", enter a measurement ID,\nand every page your visitors load fetches\n    https:\/\/www.googletagmanager.com\/gtag\/js and reports to Google on their\nbehalf.<\/p>\n\n<p>Google receives what the Google tag always receives: the page and its title,\nthe referring page, the visitor's IP address, their device, browser, operating\nsystem and screen size, their approximate location from that IP address, and\nwhatever Google's own cookies on that browser already identify. RockHeron does\nnot choose or limit any of it. It places the tag and Google does the rest.<\/p>\n\n<p>Because of that:<\/p>\n\n<ul>\n<li>It is <strong>off by default<\/strong> and nothing is requested from Google until you turn it on.<\/li>\n<li>It is <strong>skipped entirely<\/strong> when Site Kit or another plugin is already tagging the same property, so nobody is double counted.<\/li>\n<li>It is <strong>not loaded until the visitor has allowed it.<\/strong> Consent and Do Not Track are evaluated in the visitor's own browser, so a cached page cannot serve one visitor's answer to the next. With a consent mode set, no request reaches Google before that visitor consents, and if they consent later on the same page the tag loads then.<\/li>\n<li>Turning it on is a decision about <strong>your visitors' data<\/strong>, not just your own reporting, and your privacy policy should say so.<\/li>\n<\/ul>\n\n<p>These are Google services, governed by the Google Privacy Policy\n(https:\/\/policies.google.com\/privacy), the Google APIs Terms of Service\n(https:\/\/developers.google.com\/terms) and, for Analytics data, the Google\nAnalytics terms\n(https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/).<\/p>\n\n<p><strong>Nothing else<\/strong><\/p>\n\n<p>RockHeron contacts no service of ours, phones no home, and loads no script or\nstylesheet from a CDN. Everything it ships runs from your own server, including\nthe bundled charting library below.<\/p>\n\n<h3>Third party credits<\/h3>\n\n<p><strong>Chart.js 4.6.1<\/strong>, MIT licensed, bundled at <code>assets\/vendor\/chartjs\/<\/code>. The\ndashboard and report charts are drawn with it. Its license is in\n    assets\/vendor\/chartjs\/LICENSE.md and the source is at\nhttps:\/\/github.com\/chartjs\/Chart.js\/tree\/v4.6.1<\/p>\n\n<p>Nothing else is bundled.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip from Plugins, Add New.<\/li>\n<li>Activate it.<\/li>\n<li>Open RockHeron. Visits start appearing within a minute.<\/li>\n<li>Optional: open Settings to connect Google, or install Site Kit and it is picked up on its own.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20google%20analytics%20for%20this%20to%20work%3F\"><h3>Do I need Google Analytics for this to work?<\/h3><\/dt>\n<dd><p>No. Everything on the dashboard except the GA4, Search Console and Ads cards comes from your own site.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>The tracking script is roughly 6 KB, loads in the footer, and sends one small beacon per page view. Reports read a pre built daily table rather than scanning raw rows.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Page views are counted in the browser, so a cached page is still recorded.<\/p><\/dd>\n<dt id=\"the%20dashboard%20is%20empty%2C%20where%20is%20my%20history%3F\"><h3>The dashboard is empty, where is my history?<\/h3><\/dt>\n<dd><p>The plugin starts recording the day you install it. Open Settings, Import\nhistory from Google Analytics, and it fills the earlier months from your GA4\nproperty. Imported days are dashed on the chart because Google counts sessions\nslightly differently.<\/p><\/dd>\n<dt id=\"i%20took%20the%20site%20over%20and%20the%20old%20analytics%20account%20is%20not%20mine\"><h3>I took the site over and the old analytics account is not mine<\/h3><\/dt>\n<dd><p>Import your Search Console history instead. Settings, Import search history from\nSearch Console, upload the export file. It needs no Google connection, because\nthe site owner always has their own Search Console property even when the\nanalytics account belongs to a previous agency.<\/p><\/dd>\n<dt id=\"how%20do%20i%20track%20a%20specific%20button%3F\"><h3>How do I track a specific button?<\/h3><\/dt>\n<dd><p>Open RockHeron, Tracked elements. Give it a name, paste the button's CSS selector, and tick \"count this as a goal\" if it matters commercially.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20it%20up%2C%20screen%20by%20screen%3F\"><h3>How do I set it up, screen by screen?<\/h3><\/dt>\n<dd><p>Nothing here needs an account anywhere unless you choose to connect Google.<\/p><\/dd>\n<dt id=\"first%20run%2C%20and%20the%20screens\"><h3>First run, and the screens<\/h3><\/dt>\n<dd><ol>\n<li>Activate the plugin and open <strong>RockHeron<\/strong>. Recording starts immediately and\nthe first visits appear within a minute. There is nothing to switch on.<\/li>\n<li><strong>Dashboard<\/strong> is traffic: sessions, daily visitors, page views, goal\ncompletions and conversion rate, each against the previous period, with cards\nfor where visits came from, top pages and traffic over time.<\/li>\n<li><strong>Leads<\/strong> is the point of the plugin: every form submission and WooCommerce\norder with the campaign that introduced the person, read as first touch. A\nresult nobody could attribute is listed as Not known rather than dropped, so\nthese totals never quietly disagree with your form plugin.<\/li>\n<li><strong>Tracked elements<\/strong> counts anything you name with a CSS selector: a quote\nbutton, a telephone link, a PDF download. Tick \"count this as a goal\" and it\nfeeds the conversion figures.<\/li>\n<li><strong>Settings<\/strong> holds Google, privacy, retention and the Google tag.<\/li>\n<\/ol>\n\n<p>Form plugins are read automatically, never written to. Contact Form 7, WPForms,\nGravity Forms, Elementor Forms, Fluent Forms and WooCommerce are supported, both\nWooCommerce checkouts included, and the Leads screen lists which it can see, so\nan empty screen tells you why it is empty.<\/p><\/dd>\n<dt id=\"google%3A%20what%20it%20is%20for%2C%20and%20what%20you%20need\"><h3>Google: what it is for, and what you need<\/h3><\/dt>\n<dd><p><strong>You do not need Google at all.<\/strong> The plugin records visits and leads from\nyour own site, in your own database. Connecting Google only adds Google's own\nnumbers beside yours. Three independent things:<\/p>\n\n<ul>\n<li><strong>Google Analytics 4 reporting.<\/strong> Settings, Google data. Either install Site\nKit by Google and RockHeron uses its connection, or connect directly. A direct\nconnection needs a Google Cloud project with the Analytics Data API enabled\nand an OAuth client of type Web application, whose Client ID and Client secret\nyou paste into Settings. The scope is <code>analytics.readonly<\/code>, read only: nothing\nis written back and no visitor data is sent.<\/li>\n<li><strong>Google Ads.<\/strong> Only if you switch it on, adding the <code>adwords<\/code> scope to the\nsame connection so spend and clicks can be read.<\/li>\n<li><strong>Search Console history.<\/strong> No API, no credentials. Export the Performance\nreport from Search Console and upload the zip, or the CSVs inside it, in\nSettings.<\/li>\n<\/ul>\n\n<p><strong>The Google tag is separate again<\/strong> and off until you enter a measurement ID.\nIt is the ordinary gtag.js, so switching it on sends Google what the Google tag\nalways sends: page views, device and IP address, under Google's terms rather\nthan ours. The reporting connections above send Google nothing. Leave the field\nempty and no tag is loaded.<\/p><\/dd>\n<dt id=\"campaigns%20%28pro%29\"><h3>Campaigns (Pro)<\/h3><\/dt>\n<dd><p>The paid version adds a Campaigns screen that takes a CSV of what each platform\nclaimed, and shows it beside what this plugin recorded. The column format is\ndocumented at https:\/\/rockheron.com\/documentation\/<\/p><\/dd>\n<dt id=\"consent%2C%20and%20do%20not%20track\"><h3>Consent, and Do Not Track<\/h3><\/dt>\n<dd><p>Settings, Privacy. <strong>Consent mode is off by default<\/strong>, which records every\nvisit. The other three modes are:<\/p>\n\n<ul>\n<li><strong>WP Consent API<\/strong>, for any consent plugin implementing it. Statistics\nconsent is required before anything is recorded.<\/li>\n<li><strong>CookiePile<\/strong>, read directly.<\/li>\n<li><strong>A cookie you name<\/strong>: give the cookie name and the value meaning consent.<\/li>\n<\/ul>\n\n<p>Where a mode is selected but cannot be evaluated, for example the consent plugin\nhas been deactivated, the plugin <strong>fails closed<\/strong> and records nothing.<\/p>\n\n<p>Consent and Do Not Track are evaluated <strong>in the visitor's browser<\/strong>, not on the\nserver, because a decision made in PHP is written into your page cache and then\nserved to the next visitor, whose answer may be the opposite. Respect Do Not\nTrack is a separate switch in the same panel. Somebody who accepts after the\npage has loaded is picked up without a reload.<\/p><\/dd>\n<dt id=\"what%20is%20stored%2C%20how%20long%2C%20and%20how%20to%20delete%20it\"><h3>What is stored, how long, and how to delete it<\/h3><\/dt>\n<dd><p>What is kept about a lead is the campaign and a pointer to the form plugin's own\nentry. <strong>No name, no email address, no telephone number, and no advertising\nclick identifier.<\/strong> Your form plugin already holds the submission, and a second\ncopy of every lead on your site is a duty rather than a feature.<\/p>\n\n<p>Three retention settings, all in Settings, Stored data:<\/p>\n\n<ul>\n<li><strong>Attribution window<\/strong>, default 30 days. How long the first touch campaign is\nremembered in one first party cookie. 1 to 365.<\/li>\n<li><strong>Raw events<\/strong>, default 90 days. Individual page views are pruned nightly\nafter this; the daily totals they roll up into are kept.<\/li>\n<li><strong>Leads<\/strong>, default 400 days. 30 to 3650.<\/li>\n<\/ul>\n\n<p>To remove everything: Settings, Stored data deletes recorded data without\nuninstalling. Uninstalling with \"delete my data\" on drops every table, option,\ntransient and scheduled job the plugin created, found by prefix rather than from\na list. Deactivating removes only the scheduled jobs, so your data survives an\nupdate.<\/p><\/dd>\n<dt id=\"how%20the%20lists%20are%20stored\"><h3>How the lists are stored<\/h3><\/dt>\n<dd><p>Lists like top pages, referrers, campaigns and landing pages are rolled up once\na day. Each day keeps its busiest rows by name and sums the rest into a single\n\"everything else\" figure, so the stored rows account for the whole day however\nlong the list.<\/p>\n\n<p><strong>The totals are right either way.<\/strong> A cap changes only how much of the long\ntail is broken out by name: a page ranking below it every day is still counted,\ninside that one figure rather than under its own address.<\/p>\n\n<p>Defaults are 200 rows a day for pages and landing paths, 100 for referrers,\ncampaigns, outbound links and searches, and 50 for lists that cannot produce\nmore anyway, such as device, browser and country. <strong>Settings, Stored data has\none field, \"Rows kept per list, per day\"<\/strong>, setting a single number for every\nlist; zero, the default, leaves each on its own. The <code>rockheron_dim_limit<\/code>\nfilter takes <code>( $limit, $dim )<\/code> to raise one list without the rest.<\/p>\n\n<p>Each extra row is kept for good, since the daily totals outlive the raw events\nbehind them, so raising this on a site with thousands of URLs costs table rows\nfor every day the site runs.<\/p><\/dd>\n<dt id=\"troubleshooting\"><h3>Troubleshooting<\/h3><\/dt>\n<dd><ul>\n<li><strong>The dashboard is empty.<\/strong> The plugin knows only what it has recorded since\nactivation; it cannot see the past. Check you are not logged in as an\nadministrator or editor: those roles are excluded by default, in Settings,\nWhat to record, so browsing your own site while logged in deliberately\nrecords nothing.<\/li>\n<li><strong>Nothing appears on a cached site.<\/strong> Recording runs in the browser and does\nnot need an uncached page. If you see nothing, check your caching or\noptimization plugin is not deferring or stripping the script.<\/li>\n<li><strong>Leads are missing.<\/strong> The Leads screen lists the form plugins it can see. If\nyours is absent it is not supported yet. If it is listed but entries are not\narriving, confirm the form completes: a submission that fails validation is\nnot a lead.<\/li>\n<li><strong>Google numbers will not load.<\/strong> Reconnect in Settings, Google data. An\nexpired or revoked connection reports the error it received rather than\nshowing zero, because zero is a real figure and a broken connection must not\nproduce one.<\/li>\n<li><strong>Figures disagree with Google.<\/strong> They will, always, and neither is wrong.\nGoogle counts sessions its own way and loses what consent and ad blockers\ntake; this plugin counts what reached your database. Both are shown, never\nreconciled.<\/li>\n<\/ul><\/dd>\n<dt id=\"support\"><h3>Support<\/h3><\/dt>\n<dd><ul>\n<li>Documentation: https:\/\/rockheron.com\/documentation\/<\/li>\n<li>Support: https:\/\/rockheron.com\/support\/<\/li>\n<li>Email: support@rockheron.com<\/li>\n<\/ul>\n\n<p>Bring us the problem whichever route you bought by. Quote your license key if\nyou have one; otherwise the site address is enough.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Exports now carry everything the site knows, not the part that happened to be on screen. The file used to be built from the cards you had switched on, so a card you had hidden could not be exported at all even though the figures were sitting in the same table. Hiding a card is a decision about a screen, not about what the site knows.<\/li>\n<li>Your results are in the export. The plugin is called lead source attribution and the one thing you could not get out of it was the leads. Every result in the period is now in the file, with its campaign, its channel, where it landed, what it was worth and what the source was worked out from.<\/li>\n<li>An Excel export, next to the CSV. Figures arrive as figures, so you can sort and total them, and a campaign named <code>=1+1<\/code> arrives as text rather than as something your spreadsheet tries to calculate.<\/li>\n<li>The Leads screen has its own CSV and Excel, separate from the dashboard's. It carries that screen and nothing else: the headline figures, the four ways of cutting them, and the results themselves. The file is named after the screen it came from, so the two do not land in your downloads folder as copies of each other.<\/li>\n<li>All three formats are built from one description of the report, so a figure you read on screen, a figure in the spreadsheet and a figure in the PDF cannot come to disagree.<\/li>\n<li>Every string the new screens and files use is translatable, and the Hebrew is included.<\/li>\n<li>Paid builds now produce a real PDF rather than a printable page. It is laid out for the page: a running footer with page numbers, a table heading that repeats when a table runs over a break and says what it is, the results on a landscape page of their own, and the day by day figures drawn as a line. Scheduled reports arrive with that PDF attached instead of a file to open and print. Hebrew sites get a right to left report, with page paths, campaign tags and search terms printed the way round they were recorded.<\/li>\n<li>The PDF shows the newest 500 results and the 100 largest rows of each breakdown, and says so under each table. It is a document to read and hand over, and a report of several thousand rows is hundreds of pages that most servers will not finish building. The CSV and the Excel file are not limited and carry everything.<\/li>\n<li>A campaign could still be attached to a form submission after the visitor had withdrawn consent. The browser stops measuring the moment consent is withdrawn, which was working, but the cookie it had already written keeps being sent with every later request, and the plugin was still reading it when a form was submitted. So somebody who accepted your banner, was tagged by a campaign, then changed their mind, still had that campaign copied onto their next inquiry. Do Not Track and Global Privacy Control had the same gap from the other side: they stopped the cookie being written and never stopped an existing one being read. The same was true of the source WooCommerce records for an order, which is a separate route to the same information.<\/li>\n<li>Consent and Do Not Track are now checked before any campaign detail is read, on every route a visitor's own request can take. <strong>The submission is still recorded<\/strong>, with no campaign on it, and appears as Not known, so your totals still match your form plugin's. Importing past orders from the Settings screen is unaffected: that is you asking, over orders WooCommerce already attributed, and it is not a visitor request.<\/li>\n<\/ul>\n\n<h4>Earlier releases<\/h4>\n\n<p>1.0.0 was the first public release. 0.1.0 through 0.9.9 were development\nreleases: the plugin was not published anywhere while they were being written,\nso no site ever ran that code. The release history from 0.6.0, with the\nreasoning behind each decision, is at https:\/\/rockheron.com\/changelog\/<\/p>","raw_excerpt":"See where your leads actually came from, and whether the ad platform's numbers match what your site recorded.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/398940","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=398940"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/miotix"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=398940"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=398940"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=398940"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=398940"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=398940"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=398940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}