Browse the manual

Publish a widget

Publish forms, offers, bookings and customer services as website widgets, shared links or printed QR codes.

On this page

Browse all widget journeys to follow each visitor action into its staff record. The tour follows visitor, staff, Business and Platform actions. Check availability below.

Choose a widget type, configure it and publish it before sharing its address, website code or QR code.

For: owners and authorised publishers of contact details, forms, catalogue prices or counter offers.

Where: Work > Widgets on Everything, or a family such as Bookings or Vouchers & deals on another desk. Your profile also has a Business card section.

A widget works at its own page address, inline on your website or in a panel opened by a button. Each presentation uses the same content, permissions and requests.

A desk can show widget families as separate entries. Each opens this same list with its family selected. The title, type choices, New widget choices and Records menu follow that family. Your permissions still determine which widgets appear. Use Everything's Widgets entry for the complete permitted list.

Choose New widget to see each type and its purpose. No website is required for a standalone page.

Widget Who may publish it Visitor action
Form widget A form manager Submit a response, lead or board-card form
Business card The person whose profile it uses Save the contact, call, email or send a message
Team page A people manager Open a published person's card
Price list An item manager Choose items, request a quote or consent to a stock alert
Shop and cart; buy button Staff with full catalogue, order and invoice management Buy catalogue products after email verification
Menu and catering An item manager Read menu details and send a catering request
Estimator An item manager Answer questions and send the resulting estimate
Service area A settings manager Check a postal code and ask about service
Voucher, deal or coupon An offer manager Save an offer and show its code at the counter
Stamp card An offer manager Collect stamps and redeem a reward
Appointment, resource, capacity or event booking A booking manager Reserve a time or place after accepting the policy
Listing or listing collection A listing manager Browse, compare, ask questions, request an appointment or apply for a vacancy
Link page A settings manager Open a published widget or outside HTTPS address
Locations and hours A settings manager Check opening times, get directions or call
Testimonials A customer manager Answer a personal request and consent to publication
Private feedback A customer manager Rate completed work and ask for contact
Download A file manager Receive a file, optionally after entering an email
Survey or poll A form manager Answer versioned questions or choose one option
Case study or portfolio A content manager View finished work, compare images and ask for similar work
Updates A content manager Read current posts and subscribe to selected topics
Guide A content manager Follow steps, ask a question and acknowledge an addressed version
Proofs and approvals Project staff within their record access Choose files, request changes and approve one exact version
Job progress with answers Project staff; a manager defines stages Read job stages and answer typed questions

These publishing roles describe the platform workspace. In a customer workspace, its owner publishes the types included in its plan.

Proofs, job progress, shops and buy buttons stay in the Platform. Customer workspace plans do not include these types.

Shops need full order and invoice viewing and management, because online orders have no staff creator. Own-record permission alone is insufficient.

Customer counter staff serve authorised widgets but cannot configure or publish them. See offers and stamp cards for that workflow.

Guests cannot manage widgets. A people manager can close another person's card but cannot publish it for them.

Use HTTPS for your installation and external website. New widgets start unpublished and excluded from search engines. Saving a widget never publishes it.

The list shows a distinct icon and type label for each widget, its name, page requests, measured loads, interactions and status. Search by name, then filter by type or publication status. Filters apply before pagination. Clear filters restores a list with no matches. Click a row to open its settings.

Choose Analytics in the row’s overflow menu or right-click context menu to open that widget’s report. Back retains your search, filters, sort order and page. The action requires analytics access and, in a customer workspace, the plan entitlement. If statistics are unavailable, the list states why.

For platform offer records, open Records and choose Saved offers, Stamp cards or Counter records. Choose Widgets on any record list to return to the library. Counter staff use Scan; they cannot open these management lists.

Open Preview & links from the row menu or the saved widget's header to scan or copy its preview address.

Private preview requires sign-in with permission to manage that widget. It shows the saved source, including permitted listing photos. Its actions do not save visitor records or count public activity.

If the widget is published and available, choose Published page for the visitor address. Visitor actions there create real records.

Use Copy link or Open page. A checkmark and Link copied confirm a completed copy on the button for four seconds. If copying fails, select the address and copy it yourself.

For printed material or placement comparisons, create a named placement below. The quick preview QR does not identify a placement.

Widget library with sortable activity counts and daily measured-load charts

For booking widgets, first configure a schedule and service in Booking settings. Follow Take and manage bookings for publication, cancellation and recovery.

Configure, then share

The editor heading names the widget type. The saved widget name appears directly beneath it, so you can recognise the booking, offer or other widget you are changing.

Configure holds the content visitors will see. Website & appearance holds allowed websites, language, theme, accent and search visibility.

Widgets that send email also have Email from this widget. Leave its fields blank to use the business defaults.

Saving an edit closes a published widget until you publish it again. While you have unsaved changes, the footer warns you beside Save changes.

Save your changes, then open Publish & share. Click Publish widget when the content is ready.

After editing content, click Live preview again to check the current draft. Private preview in Preview & links shows the saved content. Use Save changes in the footer to keep your edits.

Page address is the default presentation. Use Copy link to copy its address. When the widget is published and available, Open page opens it in a new tab. Choose an inline or button presentation when adding the widget to a website.

Choose what each widget shows

Every widget has a name, allowed websites, language, theme, accent and publication controls. Email settings appear where the widget sends visitor email.

Use the widget controls for presentation. Edit the source for business content, prices and rules.

Widget Choices in the widget Content controlled by the source
Business card Show photo, job title, phone and email The permitted person's profile
Team Select and order published cards Each person's published card
Form Select a form; show or hide its title Fields, validation and consent in the form editor
Price list Select items; include or exclude tax in the display Item descriptions, currencies, variants, prices and stock-alert availability
Shop and cart Select currency, tax policy, products, shipping and linked booking widgets Current catalogue variants, stock, configured tax and shipping, orders and payments
Buy button Select one published shop and product The same shop and order actions
Voucher Terms, redemption rule, artwork, dates, limits and remaining count The saved offer terms define the promise
Deal Terms, redemption rule, artwork, dates, limits and remaining count State the complete deal in its terms
Coupon Terms, redemption rule, artwork, dates, limits and remaining count State the complete coupon in its terms; Pepper does not calculate a discount
Stamp card Offer choices, stamp goal and interval, reward terms and validity Accepted promises retain their recorded progress and terms
Listing collection Filter by listing template Published facts, photos, address precision and request fields in each listing
Individual listing Select one permitted listing Facts and request fields in its property, vehicle, rental or vacancy template
Appointment Select a matching service Staff, schedules, duration, buffers, prices, questions and policy
Resource or stay Select a matching resource Dates, check-in and check-out, nightly and seasonal prices, questions and policy
Group capacity Select a matching service Schedules, available places, prices, questions and policy
Event Select a matching event Dates, capacity, questions and policy; customer events are free

Booking widgets do not edit the service price. Listing widgets do not edit listing facts. Offer terms do not create a checkout or payment.

The widget tours show each type's expanded appearance controls and its own saved private preview.

Sell products through a widget

Use Shop and cart for a product collection. Use Buy button for one product from an existing published shop.

Both support the shared catalogue, email verification and supported payment form inside the Pepper frame. Customer accounts retain linked purchases. Staff fulfil the resulting order in Orders.

A purchase does not subscribe its customer to stock emails. An unavailable physical variant offers separate email verification and consent.

Follow Sell through a shop or buy button for tax, shipping, booking tickets, shared carts and recovery.

Choose a color

Under Website & appearance, click the swatch beside Brand accent to open the color picker. Choose a palette swatch, or adjust the color and hue.

You can also type a six-digit hex value. The widget accent stays opaque. Save your changes to apply it.

The accent colors primary visitor buttons, selected controls, links and focus indicators, including widget dialogs. Pepper adjusts text and link shades for contrast.

The editor preview and Private preview use the same accent. Error and success colors keep their meaning. QR codes stay black on white.

A member page can combine several widgets. It uses the standard product colors. This setting does not change staff screens or issued documents.

Press Escape to close the picker and return to its trigger.

Publish your card

  1. Open your profile.
  2. Under Business card, click New widget.
  3. Enter a name for the card.
  4. Choose whether to show your photo, job title, phone and email.
  5. Click Live preview.
  6. Click Save changes.
  7. Open Publish & share and click Publish widget.
  8. Copy Page address, or use Reusable links & QR codes below.

Your name and business name always appear. Other profile details, such as skills, working hours and rates, stay private.

Your business can set a card standard. It sets the layout, colours, logo and footer, and it can remove a field from every card. You still choose your fields and publish your own card.

Business card settings with controls for the published photo, job title, phone and email

Save contact downloads a vCard with exactly the published contact fields. A download does not prove that the visitor saved it.

A message needs a name, email and message. It creates a separate request assigned to you and creates or finds the lead.

If another colleague owns that lead, they keep it. You can read your request without gaining access to their lead.

Closing the card removes it from pages, embeds and team pages. Deactivation and offboarding close it too. Existing requests remain.

Publish a team page

  1. Open Widgets and click New widget.
  2. Select Team page.
  3. Name the page and choose published cards.
  4. Use Move up to set their order.
  5. Save the widget. Open Publish & share and click Publish widget.

A person must publish their own card first. A closed card disappears from the team page at once.

Publish a price list

  1. Create the required catalogue items, with their prices, currencies and tax rates.
  2. Open Widgets and click New widget.
  3. Select Price list.
  4. Enter a name and select Choose items.
  5. Set Show prices including tax.
  6. Save the widget. Open Publish & share and click Publish widget.

The page groups active items by category and currency. An inactive item, category or tax rate removes its items from the public list.

Price-list settings with selected catalogue items and the Live preview button

Visitors choose quantities in one currency per request. EUR and USD items have separate sections; Pepper never converts or adds their amounts together.

The estimate includes tax even when the list shows unit prices before tax. PHP calculates the estimate from the current catalogue.

A visitor supplies a name and email, with an optional message. Request a quote saves the requested items, quantities and shown prices.

A changed price or unavailable item stops submission. Refresh prices keeps the visitor's entries so they can check the new estimate.

In the platform workspace, open Widgets > Records > Requests to read permitted requests. Search by name, or narrow the list by widget type and by when the request arrived (the last 7, 30 or 90 days). Open a request to read its message. Back returns to the same search and filters.

Requests filtered by widget type and arrival date, with shared navigation and a link back to Widgets

Example with fictional data.

The back button keeps your search and page. Clear filters restores the list when a search has no results.

If there are no requests, Widgets returns to the library. Price requests reach the publisher, or the unassigned inbox if that account is inactive.

Customer owners open their own enquiries through People. Customer workspace requests never enter another business’s inbox.

A request is not an order or a promise to sell at that price. In the platform workspace, Prepare quote creates a draft using current prices. Customer workspaces do not issue quotes or invoices.

Help visitors choose

For menus, estimators and service-area checks, follow Menus and catering, Build an estimator, or Service-area checks for their setup and limits.

Publish a listing or collection

Create and publish the listing before publishing its widget. Choose Listing for one property, vehicle, rental or vacancy, or Listing collection for a searchable collection.

Visitors can compare up to four listings and send a shortlist. Staff confirm requested appointments; vacancy applications and attachments remain private. See listings and requests for templates, location privacy, alerts and follow-up.

Use one campaign across your channels

See which campaign brings visits and requests. Use one labelled link in your newsletter and another on Instagram. Both open the same widget. Analytics shows their results separately. Labels are optional.

  1. Save and publish the widget.
  2. Open Publish & share and choose the presentation.
  3. Open Track this link (UTM).
  4. Choose a saved set of labels. To create or change labels, click Customize labels, then choose a preset under Start with. The first set opens directly.
  5. Enter Campaign label (utm_campaign), such as autumn-studio.
  6. Review Source label (utm_source) and Medium label (utm_medium). You can edit both.
  7. Click Use these labels, then Copy link or Copy code.

Optional UTM builder with editable campaign, source and medium labels

The email preset starts with newsletter and email. Other presets cover social posts, paid search and printed QR codes. Custom starts with empty source and medium fields. Open More labels (optional) for content and search-term labels.

Creating labels requires analytics settings permission. Saving labels needs no separate approval. An invalid field keeps your entries; correct it and try again.

Labels allow Latin letters, numbers, spaces, hyphens and underscores, up to 60 characters. Start each label with a letter or number. Never enter personal names, email addresses or private codes.

A reusable link keeps the same address and QR code when you change which published widget it opens. For example, a code in your front window can open your business card today and your booking page later. Create it under Reusable links & QR codes. After saving, choose its name from Link to share in Publish & share, then click Copy link. This selector appears only when this widget has a reusable link. Pepper calls this named link a placement. The delivery channel records how you share a link.

Selecting a campaign changes the generated link and current QR downloads. It does not assign a permanent campaign to the widget. Select it again when you return to the editor.

Where you use it What to generate
Newsletter Choose Page address and Email as the delivery channel. Copy the link into a newsletter button.
WhatsApp campaign Choose Page address and WhatsApp. Copy the link into your message, or open WhatsApp with the generated link. Sending still needs your action in WhatsApp.
Direct link Choose Page address and Own address. Copy the link.
Website Choose Inline on the page, Open with a button or Floating button. Copy the code into the allowed website. Each snippet carries the selected campaign. Connect website consent for optional browser measurement.
Counter, poster or flyer Create a Print placement. Leave tracking labels off for placement-only evidence, or select saved UTM labels before downloading its QR asset.

When a visitor shares a link, Pepper keeps its saved campaign and active placement. The new share channel records Email, Device sharing or Copied link. The device share sheet does not tell Pepper which app you choose. The original campaign’s medium label stays the same, so a newsletter link shared in WhatsApp still belongs to the newsletter campaign.

Pepper ignores unknown, edited or cross-business campaign combinations. A placement redirect validates the campaign against its current destination. Changing the destination to a widget that does not allow the campaign’s origin removes that campaign from new visits. Closing a placement sends visitors to the original widget without the placement or campaign. Existing accepted records keep their original source facts.

Make a placement and print it

Open Reusable links & QR codes under Publish & share.

Create a reusable link for each place you share it, such as Front window, October flyer or Instagram bio. You can later make that same link open another destination. You keep the printed QR code and the address you already shared.

  1. Publish the widget.
  2. Open Publish & share. Under Reusable links & QR codes, click New code.
  3. Enter a Name.
  4. Under Where should this code lead?, choose a destination. The default is A widget. See Choose where a code leads.
  5. If Opens this widget appears, select the published destination. With only this widget available, Pepper selects it for you.
  6. Click Create code.
  7. On the code's row, click Download.
  8. Choose Code size. Then choose SVG, PNG or Print sheet · A4 or A6.

A new code uses the Print channel and the installation style. To change Channel, Copies printed or Code style, choose Edit code from the code's row actions. Channel is Print, Online, Email or Messaging. Copies printed appears for Print. For Code style, see Style your codes.

To share the link, choose the saved link's name from Link to share in Publish & share. Then click Copy link.

Placement Minimum code square Print sheet
Card or flyer 30 mm A4 or A6
Counter 50 mm A4 or A6
Window 100 mm A4

Dense codes grow to keep modules readable. Keep the white border clear. The code size applies to SVG and PNG.

A Print sheet is ready to print and use. It shows your business name (the website name for a page code), the title of what opens, the code and one short instruction, such as Scan to open. A4 is a poster with a code of 100 mm. A6 is a table or counter card with a code of 58 mm. A larger code size makes the code larger. The sheet shows no web address and no printing notes. Print it at 100%.

Test the printed code with the phones, lighting and distances your visitors use. Screen decoding does not prove a printed scan will work.

Edit code changes its name or destination without changing the link or requiring a reprint. The destination must be published and within your access. Wi-Fi and contact codes are the exception: their content is inside the code, so you must print them again after a change.

Close code sends the printed link to the original widget's address. It does not delete that widget or its requests.

Share a page

Use Copy link to copy the page address. Use Share to choose an app in your device’s share sheet. The apps shown depend on your device and settings.

If your browser does not support device sharing, Email appears beside Copy link. Email opens your chosen mail app.

The link records the share channel without identifying the sender. It also keeps an active placement and a saved campaign when present.

Anonymous pages set no cookie, use no browser storage and load no third-party assets. Contact details reach Pepper only when submitted.

Read placement results

Choose Analytics from either widget row menu, or open Customer services > Analytics, to compare placements, campaigns and channels. Exact results open their records within your access. Audience measurement starts off; enable it and connect website consent before expecting browser counts. Read website, shop and widget insights for setup, definitions and targets.

QR studio

QR studio makes the codes you print and share: codes for a widget, a website page, a web page, a file, a place, a colleague's card or an app, and codes that hold Wi-Fi access or a contact card. You style them in your brand, make sets of up to 500 and give your team one card standard. Read QR codes for every step.

Visitor agents

A visitor's own AI client can read your published widgets and do what a visitor can do on them. It can ask for a quote, book a time, claim an offer or join a stamp card. The same rules, limits and consent apply as on the page. No staff account is used, and nobody at your business needs to act.

Pepper calls this the visitor door. It is separate from AI connections for your staff. It shares no sign-in, permission or approval with them.

Who: the door is on by default. A person with the Manage settings permission can turn it off.

Turn the door on or off

Visitor agents in widget settings, with the main switch, one switch per widget family and 11 of 12 families open

  1. Open Settings > Widgets.
  2. Under Visitor agents, use Let visitors' agents use your widgets.
  3. Under Widget families, open or close each family, such as Bookings, Offers or Listings.

Each change saves at once. Closing a family removes its tools from the list agents see. Sign-in, codes, website pages and the door itself follow the main switch only.

When the door is off, every agent request gets one answer: the door is off. Pepper also leaves the agent links out of widget pages and the widget list out of your website's llms.txt.

Find the address for agents

Address for agents in Settings > Widgets shows three addresses. Agents need no account and no key.

Address Use
MCP endpoint, https://office.example.com/visitor/mcp Add it as a server in an AI client that uses MCP
Tool list over HTTP, https://office.example.com/visitor/v1/tools The same tools as plain HTTP requests
Server card, https://office.example.com/.well-known/mcp-server-card Describes the door so clients can find it

The addresses use your installation's own address. A website on a custom domain does not serve them. Its llms.txt names the installation address instead.

To see what a visitor's agent sees, add the MCP endpoint to your own AI client without signing in. Your client then gets the same tools, limits and refusals.

What an agent can and cannot do

An agent can read every published widget and website page that a visitor can open. It sends the same requests a visitor sends:

  • read menus, price lists, listings, opening hours and website pages;
  • calculate an estimate, check a service area and read free booking times;
  • request a quote, send a form, enquiry or listing request, and answer a survey;
  • book a time, with the same details and policy acceptance as the booking form;
  • claim an offer or join a stamp card after an email code;
  • prepare a shop cart and give the visitor a link to it;
  • see where one of your printed codes leads.

These steps stay with the visitor in a browser:

  • Orders and card payments. The agent cannot place an order or pay. It gives the visitor a link to the prepared cart. The visitor signs in, places the order and enters card details at the payment provider.
  • File uploads. A form with a file field answers with its page address. The visitor sends the file there.
  • Redeeming an offer. Your staff redeem it at the counter.

An agent never reaches staff screens, private records, unpublished or closed widgets, or another business's widgets.

Sign-in through the agent

Some acts need the visitor's email code, as on the page. The agent asks Pepper to send a six-digit code to the visitor's email. The visitor gives the code to their agent. The code is valid for 5 minutes and allows 5 attempts.

The sign-in lasts 15 minutes and covers one widget only. It never opens staff or customer-account access. The answer to a code request is the same for every address, so nobody can test which emails you know.

Consent works as on the page. The agent reads the same consent text and version and must send that version back. If you changed the text, the agent must read it again.

Limits and refusals

Limit Value
Reads 60 a minute per network address
Requests that create a record 10 a minute and 100 an hour per network address
Calls with one sign-in 30 a minute
Request size 64 KiB of JSON

A repeated request with the same key returns the first receipt and creates nothing twice. Capacity, stock, service hours and quantities are checked exactly as on the form.

Business text that an agent reads is data, never an instruction. A record that an agent creates goes through the form's own validation and is never an instruction to your staff agents, automations or the Assistant.

See what agents did

A record made through the door has the channel Visitor agent. Record activity shows that a visitor's agent made it. It appears in the placement register and in revenue tracing like any other channel.

Analytics shows a Visitor agents tab once agents have called. It shows calls, reads, requests sent and refusals with the last call time, calls per day, and calls by tool, by widget and by widget family. What agents made lists the exact records, placed and paid carts and paid money that came from agents. If agents made fewer than 5 calls in the period, Pepper withholds the details. Read see what visitor agents did.

Pepper keeps no IP address, device, token or other identifier for an agent call. Agent calls never count as human views. They are counted even while audience measurement is off, because they are operational counts. The audit log records each call with the tool, the widget family and the result, never the request content.

How agents find your widgets

A published widget page names its machine-readable version and the door address in its page header. It also carries structured data built from the same content as the page. A website's llms.txt lists its widgets and the door address.

Pepper sends nothing to any search engine, AI provider or registry. It does not promise that any agent finds or uses your widgets. The visitor AI overview explains this for your customers and team. Developers can read the visitor door reference.

Choose a form

  1. Open Forms.
  2. Create a form with Response record, Lead or Board card as its target.
  3. Add its fields and consent statement.
  4. Click Save.
  5. For a public form, click Publish form.
  6. Open Widgets.
  7. Click New widget.
  8. Enter the Name.
  9. Select the Form.

The form widget supports response, lead and board-card forms without Linked record fields. It cannot update customers or existing responses. A lead form adds each accepted response to Sales > Leads with the widget's form as its source detail.

A public form needs no account. An internal form requires an active staff account with Use internal forms permission. Guests cannot sign in.

Use the forms guide for field types, exact amounts, conditions, consent and private file limits.

Configure the website

  1. Leave Allowed websites empty to allow any domain, or enter the websites that may embed this widget.
  2. Set Language.
  3. Set Appearance.
  4. Enter a 6-digit hexadecimal Brand accent, such as #2B5CE6.
  5. Set Show title.
  6. Check Enabled.
  7. Try the fields under Live preview.
  8. Click Save changes.
  9. Click Publish widget.
  10. Choose Presentation: Inline on the page, Open with a button or Floating button.
  11. If needed, choose Placement to share. This keeps that placement in the code and page address.
  12. Click Copy code.

Widget settings with the selected form and its live preview

An empty Allowed websites list allows this widget on any domain. This setting does not publish the widget.

To restrict embedding, enter one website address per line, such as https://studio.example.

Do not enter a path, trailing slash, login, wildcard, query or fragment. https://studio.example/contact is invalid.

List https://www.studio.example and https://studio.example separately when both serve the form. Localhost and loopback testing may use HTTP.

New widgets start enabled but unpublished. The brand accent starts from your company PDF color. The default appearance is light.

Follow the page language reads the website's HTML lang value. A supported base language matches its available locale. Other values use English.

A fixed language overrides the page. Form labels keep the text you wrote. All product controls support the 13 installation languages.

Follow the page theme uses the visitor's preferred color scheme. It does not read your website's CSS theme class.

The preview changes with these settings and uses ordinary form controls. It creates no response.

Set the sender for visitor emails

Widgets that send email have an Email from this widget section. Configure email delivery before publishing one.

  1. Enter Sender name, such as Canal Coffee.
  2. Enter Reply-to email, such as hello@canal.example.
  3. Save the widget, check its preview, then publish it again.

Leave either field empty to use the default shown beside it. The name accepts up to 120 characters. Reply-To accepts one email address, up to 254 characters; do not enter a display name or a list.

The displayed From address comes from Settings > Email. Use an address your mail provider permits. A widget changes the display name and reply destination, not the sending address, credentials or provider-managed return address.

Each widget belongs to one business. Every placement of that widget shares its sender. A customer's billing email does not become a Reply-To address.

In a customer workspace, Account > Email from your business sets the defaults. A widget override takes precedence over those defaults.

Without a workspace sender name, Pepper uses the business name. Without a workspace Reply-To, it uses the installation default.

An offer confirmation keeps its sender name and Reply-To through later delivery retries. The member page uses its owning business's identity for sign-in codes.

Offer several services from one launcher

A widget launcher gives visitors a menu of services from one website button. For example, offer Book a visit and Ask a question.

Widget launcher settings with an allowed website and two ordered existing services

Platform users need Manage forms and permission to manage every selected widget. Their Desk assignments must permit each service. A customer-account owner can select only that account's published widgets and the families in its active plan. Counter staff cannot configure launchers. Internal forms and private customer-decision pages are unavailable choices.

Each launcher uses one website. Search Allowed website to choose a known website. To enter another website address, choose Another website and enter the address. If there are no known websites, enter the address directly.

Saving an edit closes a published launcher until you publish it again. While you have unsaved changes, the footer warns you beside Save changes.

  1. Open Widgets, then Widget launchers.
  2. Click Create launcher.
  3. Enter Button text. Visitors see this text on the website button.
  4. Choose or enter the Allowed website, such as https://example.com.
  5. Select a published widget and click Add service.
  6. Add other services if needed. Use Move up or Move down to set their order.
  7. Expand Choice options to set Choice label (optional) or Placement (optional).
  8. Click Save changes.
  9. Open Publish & share. Open the button in Launcher preview to check the actual saved widgets.
  10. Check the light and dark host previews. A widget with a fixed theme keeps that theme.
  11. Click Publish launcher.
  12. Choose the ordinary button, floating button or standalone address. Copy it to your website.

Nothing is selected for you. One available service opens directly; two or more show a choice list. The launcher supports up to 12 services. Its website must be allowed by every selected widget. You do not need to enable analytics or narrow an unrestricted widget's allowed websites to create a launcher. If all your widgets restrict their websites, the choices use those existing allowed origins.

Leave Choice label (optional) empty to use the saved widget name shown as its placeholder. The saved widget name and type remain visible. No placement leaves the choice without a named placement. Select an existing placement to keep its attribution. The help beside Placement (optional) explains this.

An origin contains the scheme, domain and optional port, without a path, query or trailing slash. Pepper does not shorten an address for you. HTTP is allowed only for local loopback testing. Open the help beside Allowed website for the matching rule.

Read-only preview opens saved widget previews without saving visitor responses. The appearance help explains how each saved widget theme takes precedence. On your live website, each service uses its ordinary form, confirmation and receipt. Visitors can use Back to services, choose another service and return with their earlier input kept. Close keeps that state until they leave or reload the page.

Floating buttons use the logical start or end edge. Start is the left edge in left-to-right pages and the right edge in right-to-left pages. The visitor controls when the launcher opens. It never opens automatically.

After saving changes, check the preview and publish again. Close launcher keeps the configuration; Remove launcher removes its public link. Both leave the widgets and their records intact.

A closed, deleted or unavailable widget disappears from the choices. A suspended plan, lost publisher permission or denied website cannot restore it through an old launcher. If no services remain, visitors see an unavailable message. The fallback opens the same trusted standalone service list when scripts or frames fail. A single available service opens directly there too.

Each choice keeps its reusable link, configured website, account, campaign and delivery channel. The standalone fallback keeps that source website and records its surface as standalone. The menu does not count a widget view, selection or business result. Only real widget activity uses the existing measurement consent and retention rules. A launcher adds no tracking cookie or visitor identifier. Each widget keeps its own sign-in and consent; switching services grants no access to another identity.

Keep existing one-widget snippets if they already do the job. You do not need a launcher collection to share one widget.

Add a widget to a Pepper website

You can select a published widget inside a Pepper website. Add a Widget section, choose the widget, then save and review the website publication.

The same source, sign-in, consent and allowed-origin rules apply. You do not need to copy embed code into the website editor.

Paste the code

The copied code contains a placeholder and one script. Use the exact code from your installation. Choosing a presentation does not change or republish the widget.

<div data-pepper-widget="YOUR_WIDGET_KEY"></div>
<script async src="https://pepper.example/build/pepper-widgets.js"></script>

Replace the example address and key with the copied values. A widget key identifies the widget; it is public.

Website Where to paste the copied code
Plain HTML In the page body where the form belongs
WordPress In a Custom HTML block; your account must permit scripts
Shopify In a Custom liquid section or a theme template that permits scripts
Webflow In a Code Embed element on the page

Your website plan, editor permissions or security policy may refuse scripts. If the editor removes the script, use its permitted theme or code area.

Save and preview the website through its ordinary publishing controls. Open the actual website origin to test the form.

An inline widget shows its content when it approaches the viewport. A button opens a panel after the visitor selects it. A floating button stays at the bottom corner; use one floating button per page.

The button uses your widget name. The panel has a Close button, keeps keyboard focus inside it and returns focus to its opener. Escape closes an open choice first, then the panel. Closing and reopening the panel keeps entered values for that page load.

The button snippet also contains a real page link. If scripts or modal dialogs are unavailable, the visitor can open that link. A loading or unavailable panel keeps the link and Close available.

The script uses assets from your Pepper installation and a separate iframe for the widget content. The surrounding website keeps its own styles and publishing controls.

Opening the panel does not grant permission for audience measurement. An unopened button is not a widget view, and reopening the retained panel does not count another page load. Use the analytics consent instructions for your website.

Allow a strict security policy

If your website sets Content Security Policy, allow your installation origin under these directives:

script-src 'self' https://pepper.example;
style-src 'self' https://pepper.example;
connect-src 'self' https://pepper.example;
frame-src https://pepper.example;

Merge these sources into your existing policy. Keep the other sources your website needs. Replace the example origin with your installation origin.

The host snippet requires no inline script or inline style permission. If you list allowed websites, Pepper refuses other domains. An empty list accepts any valid web domain.

If your server adds X-Frame-Options to every response, exclude the /embed/ responses from that server rule.

Keep the application's frame policy. A conflicting proxy or server policy can block the iframe even when the widget configuration is valid.

Test and read a response

  1. Open the website in a separate browser.
  2. Fill the form.
  3. Select a currency for each money field.
  4. Check the requested consent.
  5. Click Submit form.
  6. Wait for Your form was received.
  7. In Pepper, open Forms > Submissions.
  8. Open the kept submission and its response record.

Sample website with a filled embedded inquiry, exact EUR budget and consent

For example, a Portside Print Collective inquiry keeps EUR 4,800.50. An Offtrail Library brief can keep USD 7,250.00. A Clay Hours brief can keep JPY 650,000.

The form action checks decimal precision. The widget makes no financial posting and changes no invoice total.

A refused request keeps your input and shows its cause. Correct the field and submit again. Files remain private under ordinary file-access rules.

The form creator receives an inbox update when they still have submission access and enable update notifications.

Response records appear in permitted search, record pickers and activity. Staff without Use internal forms receive no form records.

The widget list shows this month’s page requests, measured loads and interactions as separate counts. Sort a column in either direction, or use Sort widgets on a phone. Sorting covers every matching widget, including later pages. The small chart shows daily measured loads in the business timezone.

These counts do not identify people or prove a conversion rate. Analytics shows accepted submissions and requests as exact results. Read the definitions and consent rules.

Use an internal form

  1. Click Sign in inside the form.
  2. Allow the pop-up window when your browser asks.
  3. Sign in to Pepper in that window.
  4. Complete any required second-factor check.
  5. Check the website origin shown in the connection screen.
  6. Click Connect to this widget.
  7. Fill the form in the website.

The form always uses this separate sign-in window. It works with third-party cookies blocked and keeps its temporary identity in iframe memory.

A foreign website can learn only whether you are signed in. Its scripts cannot read form values, files or the sign-in code.

Use a different origin for the external website and installation. Same-origin pages share browser access and cannot provide this separation.

The connection lasts 15 minutes. If it expires, sign in again. Your entered work remains inside that open frame for the same person.

Connecting as a different person clears that work. Reloading or clicking Sign out also clears it. Sign out revokes the temporary connection.

Ordinary account suspension, role removal and sign-in revocation stop access. A cookie from another tab never signs this form in.

Close or change a widget

Click Close widget to stop it. Alternatively, clear Enabled and click Save changes.

Saving any widget edit closes publication. Check the preview, then publish it again. Saving a source form edit also invalidates its widgets.

After a source edit, publish the public form, save the widget against that form version and publish the widget again.

Closed, disabled or stale widgets render no form. Their endpoints refuse requests. A frame already open removes itself after its next refused request.

Closing preserves responses, consent and uploaded files. Rollback of widget tables refuses removal; use your ordinary backup and restore procedure.

Handle a refusal

Symptom Cause and next step
Nothing appears Check JavaScript, exact origin, HTTPS, source publication, Enabled and widget publication
The browser blocks the frame Check website CSP and installation proxy frame headers
The editor strips the script Use its permitted code or theme area
The form says too many requests Wait before retrying; writes allow 10 per minute and 100 per hour per IP
The connection window does not open Allow pop-ups, then click Sign in again
The connection expires Sign in again in the open frame; use the same person to retain work
The form reports changed data Copy your inputs, reload the current form and review them before submitting

Page, context and browser preflight requests allow 60 requests per minute per IP. The limits apply across widget keys.

A submission challenge becomes valid after 2 seconds and expires after 2 hours. After expiry, keep your inputs before reloading.

Replaying the same valid request creates no second response, file or consent. The widget shows success only after the server accepts it.

Try the sample website

Open Sample website from a widget family, such as Stamp cards or Listings. It keeps that family selected. Back returns to the same family.

If the family has one available widget, it appears immediately. With several widgets, use Choose a widget to switch between them. The page shows the selected widget's saved content in a neutral website layout. An empty family asks you to create a widget.

Light and Dark in the preview header change the website and widget together without saving settings. In live mode, a widget set to a fixed appearance keeps that appearance; return to Website preview to try the other theme. A widget set to Follow the page theme follows the preview control in both modes.

Website preview does not save visitor records or count public activity. It uses the same private preview as the widget itself and works for unpublished widgets you may manage.

Neutral website preview with a stamp card and light and dark appearance controls

To test the live embed:

  1. Click Configure widget on the sample page.
  2. Leave Allowed websites empty, or add the sample page’s website address to the list.
  3. Check Enabled.
  4. Click Save changes.
  5. Publish the selected widget and its source, where required.
  6. Return to Sample website.
  7. Click Try live widget.
  8. Try its visitor action. On an ordinary installation this can save real records.
  9. Open the matching records, such as Forms > Submissions for a form response.

For a website with its own appearance switch, add data-pepper-theme="light" or data-pepper-theme="dark" to the embed mount before the loader runs. This sets the host appearance for widgets configured to Follow the page theme. Without it, the loader follows the visitor’s system preference. A fixed widget appearance still takes precedence.

Try live widget uses the real loader and saves accepted responses. If the widget is unavailable, click Configure widget in its message. Fresh buyer samples stay closed. The marked read-only demo publishes its fictional forms, cards, price lists, bookings, listings and active offers, but refuses new public submissions. Existing ordinary installations receive no automatic sample records.

Agent connections use the same permissions and actions. Sensitive changes require your exact approval in Pepper. Visitor answers and consent stay with the visitor.

Connect with customers and ask for answers

For the seven connection types, follow the task guide for setup, permissions, privacy and failure states:

These types use the same page, website and QR publication controls. Agents may read and prepare them. After your exact approval, an agent may publish widgets, send response requests or show or hide a testimonial. Read Approve sensitive steps for these tools. A testimonial still needs the visitor's consent.

Share work and instructions

Use cases and portfolios to show finished work and request consent for client details. Use business updates for scheduled notices and verified topic subscriptions. Use guides for versioned instructions and customer acknowledgements.

Each uses the same publication, presentation and sharing controls. Counter access alone does not permit content management or analytics.

Collect decisions during a job

Publish proofs and approvals when a customer must select images or PDFs and approve an exact version. Publish job progress with answers to show stages and collect choices, dates or delivery windows.

Only explicitly invited active contacts can read or answer after an email code. A QR code on a job ticket opens the same sign-in. On a website, the widget asks for the code before listing that contact's other open work. Removing a contact ends access.

Saving changes closes the page until you publish again. Publication sends invitations; check Customer decisions > Email history for their outcomes. No reminder, approval, answer or stage move occurs automatically. These private types are always excluded from search engines.

Need help with the product?

Contact support