
Conversion Rate Optimization
- 109 installs
- 41 repo stars
- Updated March 13, 2026
- finsilabs/awesome-ecommerce-skills
Improve revenue per visitor by auditing checkout drop-off, running heatmaps, and implementing CRO best practices before spending on A/B tests.
About
A skill for systematically raising ecommerce conversion by auditing drop-off with analytics and heatmaps and applying high-impact fixes. A developer uses it to find the 3-5 changes that lift conversion without A/B testing.
- Structured audit with free analytics plus a heatmap tool
- Prioritizes high-impact fixes over premature testing
Conversion Rate Optimization by the numbers
- 109 all-time installs (skills.sh)
- Ranked #1,126 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill conversion-rate-optimizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 109 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 13, 2026 |
| Repository | finsilabs/awesome-ecommerce-skills ↗ |
What it does
Improve revenue per visitor by auditing checkout drop-off, running heatmaps, and implementing CRO best practices before spending on A/B tests.
Files
Conversion Rate Optimization
Overview
Conversion rate optimization (CRO) is the systematic process of increasing the percentage of visitors who complete a purchase. Before spending on tools or tests, run a structured audit using free platform analytics and a heatmap tool to identify where users actually drop off. Most stores have 3–5 high-impact fixes that require no A/B testing — just implementation.
When to Use This Skill
- When overall store conversion rate is below 2% and you need a structured diagnostic approach
- When preparing an A/B test backlog based on data rather than guesses
- When optimizing a newly launched checkout flow before scaling ad spend
- When post-redesign metrics show a conversion regression and root cause analysis is needed
- When stakeholders need a prioritized roadmap of CRO experiments
Core Instructions
Step 1: Install analytics and heatmap tools
| Tool | Cost | What It Shows |
|---|---|---|
| Google Analytics 4 | Free | Funnel drop-off by step, conversion rate by source |
| Microsoft Clarity | Free | Session recordings, heatmaps, rage-click detection |
| Hotjar | Free tier available | Heatmaps, session recordings, on-site surveys |
| Lucky Orange | $18/mo | Heatmaps + funnel analytics, good Shopify integration |
Install at least GA4 (required) and one heatmap tool before doing any CRO work. Data collection takes 2–4 weeks before you have enough to act on.
---
Shopify
1. Go to Shopify Admin → Online Store → Preferences 2. Under Google Analytics, enter your GA4 Measurement ID (starts with G-) 3. For Microsoft Clarity: install the Microsoft Clarity app from the Shopify App Store — it auto-injects the tracking code on all pages including checkout 4. For Hotjar: add the Hotjar tracking code to your theme under Online Store → Themes → Edit Code → theme.liquid
---
WooCommerce
1. Install the MonsterInsights plugin (free tier) — it connects WordPress to GA4 with ecommerce tracking built in 2. For heatmaps: install the Microsoft Clarity WordPress plugin (free, official) or Hotjar plugin 3. For funnel tracking: MonsterInsights shows checkout funnel steps in WordPress admin under Insights → Reports → eCommerce
---
BigCommerce
1. Go to BigCommerce Admin → Advanced Settings → Analytics 2. Add your GA4 Measurement ID under "Google Analytics" 3. For heatmaps: go to Apps → Marketplace and install Microsoft Clarity or Hotjar
---
Step 2: Run a CRO audit — check these high-impact items first
Review your store against this checklist before running any A/B tests. These are the highest-ROI fixes:
Checkout friction (fix these first):
- [ ] Guest checkout available without forced account creation — forcing registration is the #1 abandonment cause (35% of users leave)
- [ ] Email field is the first field on the checkout form — captures abandoners for email recovery even if they don't complete
- [ ] Express payment methods (Shop Pay, Apple Pay, Google Pay) appear above the fold on mobile
- [ ] Shipping cost is shown before the customer reaches the payment step — surprise shipping costs cause 25% of abandonment
- [ ] Return policy is visible on the checkout page or product page
Product page friction:
- [ ] Primary "Add to Cart" button is visible without scrolling on mobile
- [ ] Product images include multiple angles, lifestyle shots, and zoom capability
- [ ] Reviews/ratings are displayed on the product page
- [ ] Low stock / urgency messaging is shown when inventory < 10 units
Trust signals:
- [ ] SSL padlock visible in browser
- [ ] Payment method icons (Visa, PayPal, etc.) visible near checkout button
- [ ] Money-back guarantee or return policy linked from product pages
Step 3: Identify your highest drop-off step using platform analytics
---
Shopify
1. Go to Shopify Admin → Analytics → Reports → Checkout funnel 2. This shows conversion rate at each checkout step: Information → Shipping → Payment → Order confirmation 3. The step with the highest drop-off is your primary target
Also check:
- Analytics → Reports → Sessions by landing page — find which pages drive traffic but have low conversion
- Analytics → Live View — watch real-time sessions to understand user behavior
---
WooCommerce with MonsterInsights
1. Go to WordPress Admin → Insights → Reports → eCommerce 2. Review the checkout funnel: Product page → Cart → Checkout → Order Complete 3. High drop-off at "Cart → Checkout" suggests cart page issues; high drop-off at "Checkout → Order Complete" suggests checkout friction
---
GA4 (all platforms)
1. Go to GA4 → Reports → Monetization → Checkout journey 2. This shows the standard Google ecommerce funnel: View Item → Add to Cart → Begin Checkout → Purchase 3. Click on any step to see the session recordings in Clarity/Hotjar that match users who dropped off there
Step 4: Review heatmaps and session recordings
After 2 weeks of data collection:
1. Open Microsoft Clarity or Hotjar 2. Heatmaps: look for rage clicks (red areas users click repeatedly) on product pages and checkout — these indicate user frustration 3. Session recordings: watch 10–20 sessions of users who reached checkout but did not purchase — identify specific friction points 4. Click maps on product pages: are users clicking on non-clickable product images? Are they missing the "Add to Cart" button?
Step 5: Prioritize experiments using ICE scoring
Before building an A/B test backlog, score each hypothesis:
| Hypothesis | Impact (1–5) | Confidence (1–5) | Ease (1–5) | ICE Score |
|---|---|---|---|---|
| Enable guest checkout | 5 | 5 | 3 | 75 |
| Add Apple/Google Pay above fold on mobile | 4 | 4 | 4 | 64 |
| Show shipping cost on product page | 4 | 4 | 3 | 48 |
| Add "Only X left" urgency copy | 3 | 3 | 5 | 45 |
Run experiments in ICE score order. Never run more than 3 A/B tests simultaneously.
A/B testing tools by platform:
- Shopify: Shopify Experiments (built-in, Shopify Plus only) or Intelligems app for all plans
- WooCommerce: Nelio A/B Testing plugin or Google Optimize (discontinued — use VWO or Intelligems)
- All platforms: VWO ($200/mo) or Convert ($199/mo) for serious testing programs
Step 6: Implement the highest-impact fixes
For Shopify stores, many of these are theme settings, not code changes:
- Enable guest checkout: Shopify Admin → Settings → Checkout → check "Allow customers to check out as guests"
- Enable Shop Pay: Shopify Admin → Settings → Payments → Enable Shop Pay
- Add urgency copy: use a free app like Urgency Bear or Sales Countdown Timer from the Shopify App Store
- Add trust badges: most themes have a "trust badges" section — add it to product pages and the cart page
Best Practices
- Fix drop-off at the worst-performing step first — optimize the highest-volume drop-off before moving to smaller steps
- Enable guest checkout before any other test — it is consistently the #1 highest-impact change
- Surface trust signals near the payment form — SSL badge, return policy, and accepted card logos at the point of highest anxiety
- Add express payment methods above the fold on mobile — Shop Pay, Apple Pay, and Google Pay reduce checkout time from 2 minutes to 15 seconds on mobile
- Set a minimum detectable effect before running a test — run tests without a pre-calculated sample size leads to false positives
- Use revenue per visitor, not just conversion rate — sometimes a change increases CVR but reduces AOV
Common Pitfalls
| Problem | Solution |
|---|---|
| A/B test shows conflicting results week over week | Use a fixed experiment duration based on statistical power calculation, not "when it looks significant" |
| High cart-to-checkout rate but low checkout completion | The drop-off is inside checkout — review Shopify's Checkout Funnel report to pinpoint the specific step |
| CRO changes improve CVR but reduce AOV | Track revenue per visitor, not just CVR |
| Heatmaps show rage clicks on non-clickable elements | Make these elements interactive (link product images to the product page) or remove the visual affordance |
| Funnel metrics inconsistent between GA4 and Shopify Analytics | Use Shopify's order count as ground truth; GA4 can miss orders due to ad blockers |
Related Skills
- @cart-abandonment-recovery
- @exit-intent-popups
- @cross-sell-upsell-engine
- @social-proof-widgets
- @marketing-attribution-dashboard
{
"context": "Tests whether the agent instruments a checkout funnel using the correct step type union, dual-destination tracking (dataLayer + API endpoint), SQL funnel report structure with the correct CTE pattern and percentage calculation, field error instrumentation, and advice about analytics ground truth.",
"type": "weighted_checklist",
"checklist": [
{
"name": "FunnelStep type union",
"max_score": 12,
"description": "Defines a FunnelStep type (or equivalent) that includes all seven named steps: view_product, add_to_cart, begin_checkout, enter_email, enter_shipping, enter_payment, purchase"
},
{
"name": "DataLayer push",
"max_score": 10,
"description": "Pushes funnel step events to window.dataLayer (e.g. window.dataLayer?.push) with an 'event' property and the funnel step name"
},
{
"name": "Fetch to analytics endpoint",
"max_score": 8,
"description": "Also sends each funnel step via a fetch POST call to an API endpoint (e.g. /api/analytics/funnel), in addition to the dataLayer push — not just one or the other"
},
{
"name": "Fetch payload includes sessionId and userId",
"max_score": 6,
"description": "The fetch POST body includes both a session identifier and a user identifier (not just the step name)"
},
{
"name": "SQL uses WITH CTEs",
"max_score": 6,
"description": "The SQL funnel report uses a WITH clause (CTE) rather than a flat query or subqueries only"
},
{
"name": "SQL counts distinct sessions",
"max_score": 6,
"description": "The SQL counts COUNT(DISTINCT session_id) (or equivalent unique session counting) per funnel step"
},
{
"name": "SQL 30-day filter",
"max_score": 5,
"description": "The SQL report filters to the last 30 days (e.g. NOW() - INTERVAL '30 days' or equivalent)"
},
{
"name": "SQL step-to-step percentages",
"max_score": 10,
"description": "The SQL query calculates step-to-step conversion rate percentages (e.g. dividing one step's count by the previous step's count), using division-by-zero protection (NULLIF or CASE WHEN)"
},
{
"name": "Field error event tracking",
"max_score": 10,
"description": "Tracks form validation errors by listening to the 'invalid' event on form elements (not just onSubmit or a custom approach) and records which field triggered the error"
},
{
"name": "Field error sent to endpoint",
"max_score": 7,
"description": "Sends field error data via a fetch/API call to an analytics endpoint (e.g. /api/analytics/field-error), not just logging to console"
},
{
"name": "Server-side ground truth",
"max_score": 10,
"description": "analytics-notes.md states that the server-side / internal order database should be treated as the source of truth when reconciling discrepancies, and explains why front-end analytics tools may under-count (ad blockers, script errors, etc.)"
},
{
"name": "Per-field error counting",
"max_score": 6,
"description": "Field error tracking accumulates counts per field name (e.g. a counter/map keyed by field name) rather than only recording individual events"
},
{
"name": "SQL daily grouping",
"max_score": 4,
"description": "The SQL report groups results by day (e.g. DATE_TRUNC('day', ...) or equivalent)"
}
]
}
Checkout Analytics Instrumentation
Problem/Feature Description
Luminary Goods, a mid-sized direct-to-consumer furniture retailer, has seen their overall store conversion rate dip to 1.4% over the last quarter — well below industry benchmarks. Their marketing team is spending heavily on paid social but cannot tell the CEO which stage of the purchase journey is losing the most customers. The engineering lead has asked you to build the analytics layer that will finally answer this question.
The engineering team uses TypeScript on the frontend and PostgreSQL for their data warehouse. They currently have no step-level funnel instrumentation, no field-level error tracking, and their only conversion signal is a server-side order-confirmed event. They want a complete analytics instrumentation module that tracks each stage of the checkout journey and makes that data queryable.
Your goal is to produce a TypeScript analytics module that tracks each step of the checkout funnel and captures field-level validation failures, along with a SQL report query that surfaces step-to-step drop-off rates from the resulting data. The team's data analyst also wants to know how to reconcile discrepancies if the numbers ever differ between their analytics tool and their internal database.
Output Specification
Produce the following files:
checkout-analytics.ts— TypeScript module with the funnel step tracking function and the field error instrumentation logicfunnel-report.sql— A PostgreSQL query that reads from afunnel_eventstable and produces a daily drop-off report covering the last 30 daysanalytics-notes.md— A short document (bullet points are fine) explaining the analyst's question about reconciling analytics discrepancies between front-end tracking tools and the internal order database
{
"context": "Tests whether the agent integrates Hotjar behavioral event tracking using the correct window.hj API, instruments scroll depth at the four standard milestones with deduplication, tracks required field abandonment on blur, and implements the CRO audit checklist using the correct interface and standard check IDs.",
"type": "weighted_checklist",
"checklist": [
{
"name": "window.hj event API",
"max_score": 12,
"description": "Sends behavioral events using window.hj?.('event', ...) or window.hj('event', ...) syntax — not a different Hotjar API method or a custom abstraction that omits the hj call"
},
{
"name": "Scroll depth milestones",
"max_score": 8,
"description": "Fires scroll depth events at exactly 25%, 50%, 75%, and 100% scroll milestones (all four must be present)"
},
{
"name": "Scroll deduplication",
"max_score": 9,
"description": "Uses a Set (or equivalent deduplication mechanism) so each scroll milestone fires only once per page load, not on every scroll event"
},
{
"name": "Field abandonment on blur",
"max_score": 10,
"description": "Detects required field abandonment by listening to the 'blur' event on form inputs (not submit or change) and checks that the field is both empty and marked required"
},
{
"name": "Field abandonment hj event",
"max_score": 6,
"description": "Fires a Hotjar event (via window.hj) when a required field is abandoned, not just a console log or internal counter"
},
{
"name": "AuditCheck interface",
"max_score": 9,
"description": "Defines a typed audit check data structure with at minimum: an id (string), a description, an impact level, and a check function"
},
{
"name": "Impact levels high/medium/low",
"max_score": 6,
"description": "The audit check impact field uses exactly three levels: 'high', 'medium', and 'low' (not numeric scores or other labels)"
},
{
"name": "guest-checkout check",
"max_score": 5,
"description": "The audit checklist includes a check with id 'guest-checkout' (or very close variant) that verifies guest checkout availability"
},
{
"name": "trust-badges check",
"max_score": 5,
"description": "The audit checklist includes a check with id 'trust-badges' (or very close variant) that verifies security/trust signals near the payment step"
},
{
"name": "error-messages-inline check",
"max_score": 5,
"description": "The audit checklist includes a check with id 'error-messages-inline' (or very close variant) that verifies inline (not toast/alert) form validation errors"
},
{
"name": "autofill-support check",
"max_score": 5,
"description": "The audit checklist includes a check with id 'autofill-support' (or very close variant) that verifies autocomplete attributes on address fields"
},
{
"name": "cta-above-fold check",
"max_score": 5,
"description": "The audit checklist includes a check with id 'cta-above-fold' (or very close variant) that verifies the primary CTA is visible without scrolling on mobile"
},
{
"name": "Audit findings: guest checkout",
"max_score": 8,
"description": "audit-findings.md identifies forced account registration (no guest checkout) as a failing check and cites it as a top recommendation, noting its outsized impact on abandonment"
},
{
"name": "Audit findings: trust signals",
"max_score": 4,
"description": "audit-findings.md identifies the absence of trust badges/security indicators near the payment form as a failing check"
},
{
"name": "Audit findings: inline validation",
"max_score": 3,
"description": "audit-findings.md identifies the banner/non-inline error messages as a failing check and recommends per-field inline validation"
}
]
}
Behavioral Analytics and Checkout Health Audit
Problem/Feature Description
Petal & Stone, a boutique e-commerce brand selling handmade ceramics, has a 68% checkout abandonment rate. They have anecdotal evidence of users clicking around seemingly interactive elements that don't respond, and customer support frequently receives complaints about confusing form errors. The head of UX wants to instrument the checkout flow with behavioral analytics so the team can see where users are struggling, and also wants an automated audit that flags structural checkout issues before the upcoming holiday season.
The engineering team has a Hotjar account already set up on the site (the snippet is already loaded on all pages via their tag manager, so window.hj is available). They want frontend TypeScript code that hooks into Hotjar to capture specific behavioral signals, particularly around form field interactions and how far users scroll on product pages. They also want a programmatic audit module that checks their checkout pages for the most impactful structural problems.
Your goal is to produce two TypeScript modules: one that wires up the behavioral event tracking, and one that defines and runs the checkout audit checks. Also produce a brief audit findings report using a sample checkout page description provided below.
Output Specification
Produce the following files:
behavioral-tracking.ts— TypeScript module that initializes CRO event tracking. It should capture behavioral signals from forms and pages to surface to the analytics tool.checkout-audit.ts— TypeScript module defining the audit check list and the function to run all checks against a checkout page. Include the full list of checks as a typed data structure.audit-findings.md— A short findings report based on the sample page description below, listing which audit checks pass or fail and the top recommendations. Include specific checkout UX improvements the team should prioritize.
Input Files
The following files are provided as inputs. Extract them before beginning.
=============== FILE: inputs/sample-checkout-page.md ===============
Sample Checkout Page Description
Current State
The checkout flow is a single long-scroll page (not multi-step) with the following characteristics:
- Users must create an account before they can proceed to payment (no guest option)
- The payment section is 900px below the fold on mobile; the "Complete Purchase" button is only visible after scrolling
- Form validation errors appear in a red banner at the top of the page after the user clicks "Submit"
- The address form has 8 required fields: first name, last name, address line 1, address line 2, city, state, zip code, country — with no autocomplete enabled
- There are no security badges, SSL indicators, or accepted card logos visible near the payment fields
- The form fields have no
autocompleteattributes set
{
"context": "Tests whether the agent uses the ICE scoring framework with the correct interface shape and formula, implements a revenue impact calculator with the correct parameters, documents the max-3-concurrent-experiments constraint and statistical rigor requirements, and tracks revenue per visitor as a success metric.",
"type": "weighted_checklist",
"checklist": [
{
"name": "ICE interface fields",
"max_score": 10,
"description": "Defines an experiment data structure with at least three separate numeric fields for impact, confidence, and ease (not a single combined score field)"
},
{
"name": "ICE score is product",
"max_score": 10,
"description": "Computes the ICE score as the product (multiplication) of impact, confidence, and ease — not a sum, average, or weighted sum"
},
{
"name": "ICE sorts descending",
"max_score": 6,
"description": "Ranks experiments in descending order of ICE score (highest score first)"
},
{
"name": "ICE scale 1-5",
"max_score": 8,
"description": "Uses a 1-to-5 scale for each ICE dimension (not 1-10, 0-100, or percentages)"
},
{
"name": "Revenue impact function",
"max_score": 8,
"description": "Implements a revenue impact calculation that takes at minimum: visitor count, current CVR, expected CVR lift, and average order value as inputs"
},
{
"name": "Revenue impact outputs lift",
"max_score": 6,
"description": "The revenue impact function returns or prints both monthly and annual revenue lift (not just current vs. new revenue)"
},
{
"name": "Max 3 concurrent experiments",
"max_score": 12,
"description": "experiment-guidance.md explicitly states that no more than 3 experiments should run simultaneously (or equivalent warning about concurrent test interference)"
},
{
"name": "Pre-calculated sample size",
"max_score": 8,
"description": "experiment-guidance.md mentions setting a minimum detectable effect or pre-calculating required sample size before launching a test (not stopping 'when it looks significant')"
},
{
"name": "Fixed test duration",
"max_score": 6,
"description": "experiment-guidance.md advises using a fixed experiment duration based on statistical power, not peeking and stopping early when results look promising"
},
{
"name": "Revenue per visitor metric",
"max_score": 10,
"description": "experiment-guidance.md recommends tracking revenue per visitor (not CVR alone) as a success metric, noting that CVR gains can be offset by AOV drops"
},
{
"name": "Express payments included",
"max_score": 6,
"description": "The experiment backlog includes an experiment for express/wallet payment methods (Apple Pay, Google Pay, or equivalent) and it receives a high ICE score"
},
{
"name": "Guest checkout experiment",
"max_score": 6,
"description": "The experiment for removing forced account registration (guest checkout) is included in the backlog and ranks near the top of the prioritized list"
},
{
"name": "Hypothesis field",
"max_score": 4,
"description": "Each experiment entry includes a hypothesis statement (not just a name/title) describing the expected outcome"
}
]
}
CRO Experiment Prioritization and Business Case Tool
Problem/Feature Description
Birchwood Home, an online home goods brand, has accumulated a backlog of 8 checkout improvement ideas over the past six months. The growth team has been arguing about which experiments to tackle first, with engineers pushing for the easiest wins and the CMO pushing for the biggest revenue impact. The VP of Growth wants to settle the debate with a data-driven prioritization framework that everyone can reference, and also needs a financial model to justify experiment investment to the board.
You have been asked to build a TypeScript prioritization module that scores each experiment in the backlog and ranks them objectively. The tool also needs to model the expected revenue impact of the top experiments so the team can quantify what is at stake. The team has also asked you to document a brief guidance note on responsible experiment management practices to accompany the tool.
The experiment ideas to include in the backlog are: 1. Allow checkout without mandatory account registration 2. Add Apple Pay and Google Pay buttons at the top of the checkout page 3. Show a "3 items left in stock" urgency message on the product page 4. Redesign the shipping address form to reduce the number of required fields 5. Add a progress bar showing the steps remaining in checkout 6. Show security trust badges and accepted payment logos next to the payment form 7. Send abandoned cart emails triggered 30 minutes after cart abandonment 8. Allow customers to save their cart across sessions without creating an account
For the financial model, use these site metrics: 180,000 monthly visitors, current CVR of 2.1%, average order value of $72.
Output Specification
Produce the following files:
experiment-prioritizer.ts— TypeScript module with the experiment data structures, scoring function, and revenue impact calculator. Include the full scored and ranked backlog as a constant, and demonstrate the revenue impact calculation for the top-ranked experiment.experiment-guidance.md— Brief guidance notes covering best practices for running this experiment program responsibly (concurrent test limits, how to determine when an experiment is ready to call, and what metrics to track alongside conversion rate).
{
"name": "finsi/conversion-rate-optimization",
"version": "0.1.0",
"summary": "CRO audit frameworks, heatmap analysis, and checkout funnel optimization",
"skills": {
"conversion-rate-optimization": {
"path": "SKILL.md"
}
}
}