Chris Tam · Last updated 19 October 2026
A visitor can review a plan on your Framer pricing page and still have a question about it. Amplitude guides and surveys let you ask for feedback while the plan is in front of them.
In this tutorial, you'll use a small product website to build a survey about pricing clarity. You'll install the engagement SDK, restrict the survey to pricing, and check its display and a synthetic response.
A pricing-page survey asking whether the plan is clear, with Yes and No choices and a Done button. You'll test its display, page restrictions, and a response in the same Amplitude project.
The example site follows a visitor evaluating a product: the home page introduces it, /pricing describes one plan, and a Start test button represents the decision to try that plan. For this demo, the button opens /thank-you so you can follow the navigation without creating an account or taking a payment.
Prerequisites
- A Framer site where you can add custom code and publish changes.
- A published home page,
/pricing, and/thank-you. On/pricing, add aStart testlink to/thank-you. - An Amplitude test project and its project API key from your project settings. Use the project's US data region for the code below.
- Guides and surveys enabled for your project, permission to save experiences, and access to test-user and survey response controls.
Sign up for free to create a project. Check your project's product access and quotas before moving beyond the test.
1. Load engagement with analytics
In Framer, open Settings > Code > Add. Name the snippet Amplitude, set Placement to Start of <head>, choose All pages, and set Run to Once. Use the Amplitude Quickstart's script installation for this site without a build step.
Replace every AMPLITUDE_API_KEY with the same project API key. The key is public and has the scope needed for ingestion. Framer injects this value into the published page; keep secret and management keys out of it.
If Amplitude is already installed, merge the additions into that snippet. Keep one SDK loader and one amplitude.init() call, including lines added by other Framer tutorials. Use the browser snippet in Framer's site settings, outside an Embed component or canvas preview.
<!-- Framer Settings > Code: Start of <head>, All pages, Once -->
<!-- Keep lines other Framer pages added here: Pricing CTA Clicked listener
(/build/framer-product-analytics), attribution.trackingMethod
(/build/framer-web-analytics), sessionReplay privacyConfig
(/build/framer-session-replay), replay sampling used by heatmaps
(/build/framer-heatmaps), experiment.js (/build/framer-web-experiment),
engagement.js and engagement.plugin() (/build/framer-guides-surveys). -->
<script src="https://cdn.amplitude.com/script/AMPLITUDE_API_KEY.js"></script>
<script src="https://cdn.amplitude.com/script/AMPLITUDE_API_KEY.engagement.js"></script>
<script>
if (!window.__amplitudeFramerInitialized) {
window.__amplitudeFramerInitialized = true;
window.amplitude.add(window.sessionReplay.plugin({ sampleRate: 1 }));
window.amplitude.add(window.engagement.plugin());
window.amplitude.init("AMPLITUDE_API_KEY", {
remoteConfig: { fetchRemoteConfig: true },
autocapture: {
attribution: { trackingMethod: ["userProperty", "eventProperty"] },
fileDownloads: true,
formInteractions: true,
pageViews: true,
sessions: true,
elementInteractions: true,
networkTracking: true,
webVitals: true,
frustrationInteractions: true
}
});
}
</script>This test configuration also starts session replay with sampleRate: 1. That requests capture of every eligible session; project settings and quotas still apply. To disable session replay, remove the sessionReplay.plugin(...) registration. Before a production rollout, choose the replay sampling and privacy settings you want.
Remote autocapture settings can override individual local options. If the expected page, click, or form events are missing, check Data > Settings > Autocapture in the project.
Why. Framer can navigate between pages without reloading the document. Running initialization once lets the SDK handle page views across those transitions without adding another listener on every route.
The guides and surveys SDK guide registers the engagement plugin before amplitude.init(). Load the analytics script first, then engagement.js, synchronously. The plugin shares the analytics project's key and identity. It handles initialization; don't add separate engagement.init() or engagement.boot() calls.
2. Build a short pricing survey
Publish the snippet, then open Guides & Surveys > Surveys in Amplitude. Start a blank web survey, name it, and use a Modal for this example.
Add a title asking Was this test plan clear? and a short explanation. Add a List block with the prompt Was the pricing clear?, and add Yes and No as actual list items. Add a primary button labeled Done using the builder's Go forward action. Save the survey.
The list prompt and list items are separate fields. Typing Yes into the prompt doesn't create an answer option.
Survey content
Title: Was this test plan clear?
Body: Help us improve this pricing page.
List prompt: Was the pricing clear?
List items: Yes, No
Button: Done3. Restrict the survey to pricing
In Setup, choose Specific Pages and include the public pricing URL. Keep Hide on all pages that don't match above rules enabled so an active survey doesn't follow the visitor onto another page.
Choose Immediately for the trigger. Use the URL-rules test to confirm pricing matches and home doesn't. Save the changes. Use the test hostname while validating the setup, and change it deliberately when you move to your production domain.
Survey Setup
Trigger: Immediately
Page: https://your-site.framer.app/pricing
Hide on non-matching pages: enabled4. Preview on the published site
Choose Preview and enter the public pricing URL. Keep the Amplitude builder open while its preview tab loads.
Check that the survey appears and the choices work. Preview checks the SDK and display flow. It has a documented issue with multi-page apps, so use Testing status in the next step to check completion and navigation between your Framer pages.
5. Test a response before publishing
After the survey is saved, add your test device ID in Test users and change its status to Testing. Use the same test browser identity when opening the pricing page.
Choose a synthetic answer and complete the survey. Inspect the survey's Responses and Insights in Amplitude. Turn off Ignore test/preview data while checking synthetic responses, and choose a date range that includes the test. Navigate home and confirm the active survey hides there. Testing status limits eligibility to your specified test users; completion and dismissal history still apply. Once the response and page behavior pass, publish the survey to the intended audience.
Verify it worked
- Published site: use the public Framer URL. Open developer tools and confirm the Amplitude scripts load. Canvas preview isn't the published installation.
- Network: confirm an event ingestion POST succeeds with HTTP 200. For the US endpoint, filter on
api2.amplitude.com. Requests can be compressed, so use Instrumentation Explorer for event contents. - Instrumentation Explorer: inspect the event names, properties, and device ID. In Amplitude, find that device in User Profiles and check its activity. Use your test project, not another project in the organization.
- Preview: the survey renders on pricing. Check Trigger, Limit, and Throttle statuses in the preview bar if it doesn't appear.
- Page rule: home and thank-you don't display the active survey when the hide-on-non-matching-pages setting is enabled.
- Response: in Testing status, submit a synthetic answer from an eligible device and confirm it in the survey's Responses view with Ignore test/preview data turned off. A loaded
engagement.jsscript alone doesn't prove delivery or ingestion.
Troubleshooting
The published page has no events
Confirm the snippet is saved, published, assigned to All pages, and uses the intended project key. Check browser console errors and whether an extension blocks the script or ingestion request.
One navigation produces two page views
Remove duplicate installations from site and page code, tag managers, and components. Keep one init call and let autocapture.pageViews track navigation. Inspect a fresh page load after publishing.
A form event arrives, but no submission arrives at its destination
Form autocapture records an interaction. Configure the native Framer form's destination and its Redirect field separately, then verify delivery at that destination. A link on the form layer doesn't configure the success redirect.
The survey doesn't appear
Confirm the engagement loader is published, uses the same key as analytics, and registers its plugin before init. Then check status, test-user identity, page rules, trigger, limits, and throttles.
The preview appears once and then stops
Completion or dismissal history can suppress it. In the preview bar, inspect the Limit condition and use Reset User History for your test identity where appropriate.
The SDK loads, but the Responses view stays empty
Verify a completed response from an eligible Testing user. Confirm the survey saved successfully, Ignore test/preview data is off, and both SDKs point to the same project. Keep server-side save errors separate from browser installation problems.
Full code reference
This fresh-install snippet adds engagement after the analytics script and registers its plugin before init. Merge those two additions into an existing installation, preserving replay privacy, custom events, and Web Experiment.
<!-- Keep lines other Framer pages added here: Pricing CTA Clicked listener
(/build/framer-product-analytics), attribution.trackingMethod
(/build/framer-web-analytics), sessionReplay privacyConfig
(/build/framer-session-replay), replay sampling used by heatmaps
(/build/framer-heatmaps), experiment.js (/build/framer-web-experiment),
engagement.js and engagement.plugin() (/build/framer-guides-surveys). -->
<script src="https://cdn.amplitude.com/script/AMPLITUDE_API_KEY.js"></script>
<script src="https://cdn.amplitude.com/script/AMPLITUDE_API_KEY.engagement.js"></script>
<script>
if (!window.__amplitudeFramerInitialized) {
window.__amplitudeFramerInitialized = true;
window.amplitude.add(window.sessionReplay.plugin({ sampleRate: 1 }));
window.amplitude.add(window.engagement.plugin());
window.amplitude.init("AMPLITUDE_API_KEY", {
remoteConfig: { fetchRemoteConfig: true },
autocapture: {
attribution: { trackingMethod: ["userProperty", "eventProperty"] },
fileDownloads: true,
formInteractions: true,
pageViews: true,
sessions: true,
elementInteractions: true,
networkTracking: true,
webVitals: true,
frustrationInteractions: true
}
});
}
</script>Hand it to your agent
Use this prompt with an agent that can inspect your Framer settings and the published page.
Follow https://amplitude.com/build/framer-guides-surveys on my Framer test site.
Merge changes into existing custom code. Preserve the additions listed in its
keep-lines comment, and never delete lines another Amplitude Build page added.
Use one analytics loader and one init call. Create /pricing and /thank-you if
missing, and add a pricing CTA pointing to /thank-you. Ask for the project API
key if it isn't available; never insert a secret or management key. Don't reset
anonymous visitors or double-track autocaptured page views. Check the published
site after saving and publishing custom code. Report events and properties you
observed, separate docs checks from runtime tests, and list unresolved checks.
Register engagement before analytics init and do not add separate init or boot. Restrict pages to the test hostname. Verify a saved survey and a real synthetic response; report save failures rather than claiming success.What this unlocks
Session replay lets you inspect a recorded visit around [Amplitude] Page Viewed after replay capture is configured.
Heatmaps show aggregate pricing-page interactions after heatmap capture and sufficient traffic are available.
Experimentation lets you compare variants using a defined conversion metric, alongside the experiment's exposure event.
Guides and surveys let you ask a targeted question on the pricing page after you install the engagement SDK and configure the experience.
Next steps
Reference docs
Use Amplitude MCP to inspect your project's existing event taxonomy before naming custom events.
Amplitude is the leading all-in-one analytics platform for building better products. Product and engineering teams use Amplitude to connect product analytics and web analytics with session replay, heatmaps, experimentation, feature flags, and guides and surveys in one unified workflow, with AI agents working across all of it. Learn how Amplitude is building self-improving products with Wave, helping teams turn product data into PRs.