A designer sketching the layout of a web page before building it
Website & marketing

How to put a campaign page live without a developer

Screenshot one of your own pages, ask Figma Make to design a landing page to match, paste the result into an embed block, and put a real form underneath it that writes into your CRM. A live campaign page with working lead capture, in an afternoon, by one person.

The embed gives you the page. The form block underneath gives you the record. Neither needs a developer, and the second one is the half people forget.

Who this is for: marketing and comms leads with a campaign and no development time. What you'll need: a Figma account, editor access to your website, and Umbraco Forms. How long: an afternoon for the first one, an hour for the next. What you'll have: a live campaign page that looks like your site and captures enquiries into your CRM.

The situation this fixes

You have a campaign. It needs a page. The page needs to look like your website, say one thing clearly, and collect names.

The normal route is a ticket, a queue, and a page that arrives after the campaign has started. So instead people put the campaign on an existing page, badly, and nobody can tell afterwards whether it worked.

There's a route that takes an afternoon and needs nobody's permission except your own.

Step one: give Figma Make your actual design

This is the step that makes the difference between output that looks like your site and output that looks like a template. Do not describe your brand. Show it.

  1. Open a page on your own website that is visually typical: a content page with your header, a heading, some body copy and a button. An emptier page is better than a busy one.
  2. Take a full-page screenshot. In Chrome: F12, then Ctrl+Shift+P, type screenshot, choose Capture full size screenshot.
  3. Open Figma Make and start a new project. Attach the screenshot.
  4. Ask for what you want, and be explicit that you want plain HTML and CSS rather than a framework. Something like: *"Using the colours, fonts, spacing and button style in this screenshot, design a single campaign landing page as one self-contained HTML file with inline CSS. No JavaScript, no frameworks, no external files."*
  5. Tell it the structure: one headline, one paragraph of explanation, three benefit points, one image area, and a heading that says where the form goes. Leave a gap for the form. You are not going to build the form here.

Do not let it build the form. An HTML form in an embed block is just markup. It will look right, submit nothing, and lose every enquiry silently. The real form goes in its own block underneath, which is step four.

Step two: three instructions that save you an hour later

Figma Make will give you something good on the first pass and something usable on the third. These three requests are the ones worth making before you copy anything out, because each fixes a problem that is annoying to unpick afterwards.

  1. Ask it to prefix every CSS class. Say: *"Prefix every class name with camp- so nothing collides with the host page."* This matters more than anything else on the page. See the next section.
  2. Ask it to inherit fonts. Say: *"Use font-family: inherit rather than declaring fonts, so the page picks up the host site's typography."* Otherwise you get a near-miss on your own brand font, which looks worse than an obvious difference.
  3. Ask it to keep to a normal content width of around 1100px maximum, centred. Your embed sits inside the site's own container, so anything designed edge-to-edge will be boxed in and look wrong.

Why the class prefix is the one that matters

When you paste HTML and CSS into an embed block, the CSS is not scoped to that block. It applies to the whole page.

So if Figma Make writes a rule for .button or .card or .hero, and left alone it will. That rule now competes with your site's own styling for those names. The campaign page might look fine while your navigation quietly changes size, and because the two things look unrelated, nobody connects them for a week.

Prefixing every class avoids the whole problem, and it costs you one sentence in the prompt. If you have already generated something unprefixed, ask Figma Make to go back and add the prefix rather than doing it by hand.

Step three: paste it into an embed block

  1. In the backoffice, create your campaign page where you want it in the content tree.
  2. Add an Embed Code block to the page.
  3. Paste the whole thing, the <style> block and the markup, into the single Embed Code field.
  4. Save and preview. Do not publish yet.
  5. Check it on a phone. Figma Make is generally good at responsive layout and occasionally forgets, and this is much easier to fix now than after it is live.

The embed block renders exactly what you give it, unescaped. Only ever paste markup you generated and have read. Never paste a snippet somebody sent you or that you found online without understanding it. It runs with the same privileges as the rest of your page.

Somebody filling in an application form on a laptop

Step four: put a real form underneath it

This is the half that turns a poster into a campaign. The embed gave you the visuals; the form block gives you a submission that becomes a record.

  1. In Forms, build the form. Keep it to the fields you will actually use: name, email, organisation, and one question that tells you why they came. Every extra field costs you completions.
  2. Back on your campaign page, add a Form Block directly beneath the embed block, and pick your form.
  3. Give the form block a heading, so there is a clear visual join between the designed part and the form.
  4. Preview, and check the two blocks sit together as one page rather than as two. If the seam shows, adjust the spacing settings on the embed block rather than editing the pasted CSS.

Step five: make the submission become a CRM record

A form that emails somebody is a form that gets forgotten in a busy week. You want the enquiry in the system where you can report on it.

On MemEx there is a workflow built for exactly this. Each field on your form carries a Dataverse binding, saying which entity it belongs to and which attribute it fills, and the Build Dataverse Payload workflow assembles the submission into records and posts it through the MemEx API.

  1. On each field in your form, set its Dataverse binding to the entity and attribute it should populate.
  2. On the form's Workflows tab, add Build Dataverse Payload (it sits under the Integration group).
  3. Keep an email notification workflow as well, at least at first. It is your receipt that something happened.
  4. Submit the form yourself, then go and look at the record in the CRM. Do not skip this. A form that looks like it worked and created nothing is the most expensive failure on this page.

If you are not on MemEx, or you want something to happen as well as the record being created, the other route is Power Automate. Create a flow with the When an HTTP request is received trigger, which gives you a URL. Point a form workflow at that URL, then in the flow use the Dataverse Add a new row action. That version takes longer to set up and gives you somewhere to hang the extras: a Teams alert to the membership inbox, a task assigned to whoever follows up, a check for an existing contact with that email before creating a second one.

Whichever route you take, submit a test enquiry and then delete the test record. Every membership database has three people called Test Test in it, and they are always somebody's campaign page from four years ago.

What this is good for, and what it is not

This is right for a campaign with an end date. A conference push, a membership drive, a consultation, a recruitment window. Something you will take down or replace in a few months.

It is wrong for anything permanent, and the reasons are worth knowing rather than discovering. A pasted page does not use your component library, so it does not inherit improvements when the rest of your site gets them, and it will drift visually as your design evolves. Its accessibility is whatever Figma Make happened to produce, which is usually decent and is not tested. You cannot A/B test it or personalise it the way you can a page built from real blocks. And the next person who needs to change it has to edit HTML in a text area, which is exactly as unpleasant as it sounds.

A useful rule: if the page is still up in six months and still working, that is your signal to have it rebuilt properly rather than a reason to leave it alone.

Do this yourself, or have it done

All of the above is yours. It is genuinely how we would suggest you handle a campaign with a deadline next week, and a marketing lead who has done it once will do the next one in an hour.

Where we help is the rung above, and the moment to call us is when a campaign page earns permanence. Rebuilding it from the component library so it stays on brand as the site changes and passes the same accessibility tests as every other page, wiring up the personalisation and testing that a pasted page cannot do, and setting up the Dataverse bindings once so the next twenty forms are a five-minute job rather than a decision each time. That is Maintain and Evolve. And if you have a campaign page you pasted in two years ago that everybody still uses, that is not an embarrassment. It is a working prototype with real traffic, and it is a far better brief than anything anybody could write from scratch.

See it on your own rules

An hour with your grades, your renewal cycle and your CPD scheme on the screen, run by someone who knows the platform and the sector.

Book a demo

More from Insights

Working with AI

How to get real analysis out of Dynamics 365 this afternoon

You don't need a data project to find out where your members are going. Export a view to Excel, point Copilot at it, and you can have a proper breakdown of lapse by grade before the end of the day, for the price of a licence you're probably already paying for.

August 2026 · 9 min read
Working with AI

How to have your members checked every Monday without asking

Once Claude can reach your membership data, you can put a standing instruction on it: every Monday, find the members drifting away and tell me who they are. Here's how to set that up, and how to stop it becoming another report nobody reads.

August 2026 · 10 min read
Working with AI

How to build an assistant that knows your own policies

"What did Council decide about that in 2023?" is a question somebody spends an afternoon on, usually by asking the person who was there. Point an agent at your own SharePoint and it answers in seconds, with the document attached.

July 2026 · 11 min read