The short answer
mParticle moves your customer data. DataCops decides which events deserve to reach your ads, and adds the sales that happen after the click.
DataCops is a tool that does the ad-conversion job without a container, warehouse or plugin: one script and one DNS record on your own domain, a bot verdict on every visit with a Real people only switch per ad platform, the real sale from your CRM or Shopify sent back to your ads, new campaigns warmed up with the customers you already have, and a log of every send.
How DataCops does it:
- First-party collection, no extra tool. One script and one DNS record put collection on your own subdomain; with your DNS on Cloudflare, the free Worker reads the click at the edge before the page loads. Click IDs are kept on the server for up to 90 days.
- Real people only. Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, with a Real people only switch per ad platform, off by default. Every form email is checked for disposable providers, domains with no mail server and an email risk score.
- The sale after the form. HighLevel natively (lead, booked, showed, won with value, paid), any CRM by webhook, Shopify through the DataCops Shopify app, all matched to the click by click ID or hashed email and phone, and sent to Meta, Google Ads, TikTok and LinkedIn.
- Ads Warmup. Upload your existing customers (up to 20,000 rows), see a 0 to 10 match score per person, and send them to Meta, Google Ads and TikTok so new campaigns start warm.
- Consent, memory and proof. A TCF 2.2 consent banner from your domain with Google Consent Mode v2 on by default, a server-set cookie up to 400 days where enabled, and a delivery log row for every send, counted once against the pixel.
Best for: teams who want better ad conversions without building or maintaining the pipe: lead gen, ecommerce, clinics, home services, B2B and agencies.
The alternatives at a glance:
- DataCops: best overall if your goal is ad tracking. One script, a bot verdict on every visit, a consent manager built in, and CRM stages sent to your ads.
- Segment: best CDP for product and engineering teams.
- RudderStack: best for teams that run their own data warehouse.
- Tealium: best for large regulated enterprises.
- Stape: best for cheap server-side GTM hosting.
Most people who search for an mParticle alternative start with the sales call. No prices on the site, a quote for every plan, a contract sized for an enterprise. That is a fair reason to look. It is not the main one.
The main one is this: many teams bought a customer data platform to fix their ad tracking. A CDP is not built for that job. It is built to move data. Every mParticle alternatives list compares CDPs to other CDPs. This guide asks a different question first.
Is a CDP the answer to ad tracking?
A CDP, a reverse ETL tool or a server host all do the same kind of work. They move your data from one place to another, fast and at scale. mParticle does this very well, to more than 300 tools.
But moving data is not the same as doing the tracking. A pipe does not ask three questions:
- Should this event go at all? A bot's form fill is data. mParticle will move it to Meta as happily as a real lead.
- Did the visitor agree? mParticle carries consent signals. It does not ask for them. That banner is another tool.
- What happened after the form? The booked call and the won deal live in your CRM. A pipe carries them only after you build the flow, match each one to the click, and keep it working.
So you end up with a powerful pipe, and a list of jobs that still need doing. Think of it like a delivery company. It moves any box you hand it, on time. It does not check what is inside, or pack the boxes you forgot.
The same is true of every tool in this class. A server host runs your tags. A CDP routes your events. A reverse ETL tool syncs rows from your warehouse. None of them decides which events deserve to reach the ads, keeps bots out of them, or sends the CRM stage matched to the ad click unless you build it. Hosting or piping the work is not doing it.
DataCops is the tracking solution for ad-funded businesses: it keeps bots out of what your ads learn from and sends the sale that happens after the form to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X.
We will be fair about the other side. If you need warehouse destinations, audiences, one profile per person across devices, strict schema control and engineering freedom, a CDP gives you that and DataCops does not. That is a different goal. This page is for the teams whose goal is the ads.
mParticle moves the data. DataCops decides which data your ads should learn from.
The real difference: what reaches the ads
Here is what that means in practice, one job at a time.
Nothing to build
With mParticle, you get a platform. Your team installs SDKs, writes a data plan, and sets up each output, deciding which events go to Google Ads and Meta and how the fields map. It is powerful once built. Building it is the job.
DataCops has no data plan. You add one script and one DNS record on your own subdomain, and connect Meta, Google Ads, TikTok, LinkedIn and X with one click each, and Microsoft Ads, Reddit and Pinterest with an API key.
Every visit gets a verdict
A CDP trusts what it receives. On the mParticle pages we read, we found no bot, datacenter, VPN or proxy filtering. The events go downstream as they come.
DataCops checks every visit for bots, datacenter traffic, VPNs and proxies, and turns that into one switch per ad platform (see click fraud protection). Turn on Real people only for Meta and flagged visits never reach Meta. With it on, about 99% of bots are kept out. It is off by default, so you choose where it applies. Every bot lead Meta receives is a lead it goes looking for more of.
The sale happens after the form
For a clinic, an agency or a B2B team, the money comes later: the booked call, the patient who showed up, the deal marked won. mParticle can carry that data if your engineers build the flow and match each sale to the click.
DataCops does it for you. Install it once on your HighLevel agency and pick the clients. Form leads, booked calls, show-ups, won deals with their value and paid invoices go to each client's Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X, matched to the ad click. Any other CRM posts the sale to a private webhook, directly or through Zapier, Make or n8n. Cancellations, no-shows and lost deals are never sent.
Consent is built in
mParticle maps its Consent Purposes to Google's ad_user_data and ad_personalization fields. That is useful, but the consent still has to be collected somewhere, and we found no banner or IAB TCF manager of its own. DataCops includes a first-party consent manager built on IAB TCF v2.2 and website events wait for consent before they are sent.
You can see why each event was sent
DataCops writes every conversion as a row per platform (sent, held, skipped or failed) with the reason next to it. When a client asks why last month's conversions dropped, you open the row.
Privacy and data deletion are built in
mParticle holds serious certificates: SOC 2 Type II, ISO 27001 and PII detection. DataCops takes a smaller, simpler route. Visitors ask for deletion through a form on your privacy page, confirm by email, their session is anonymised, and a status page shows what was done. Deletion requests from Meta, TikTok and LinkedIn are acted on automatically; Google Ads deletions are a manual step. Click IDs, sessions and the click log are deleted after 90 days, and the identity store holds hashed emails and phones only.
mParticle tells you the event was delivered. DataCops tells you whether it should have been.
The real cost of a quote-only tool
mParticle has no price on its site. You find out on a sales call. Either way, the licence is only part of the cost. Answer these with your own numbers.
How many hours will it take to build your mParticle data plan, SDKs and ad platform connections before the first sale is tracked?
How many hours a month will someone spend keeping it working when Meta, Google or TikTok change something?
If a tag breaks quietly for a week, how many leads never reach your ads? And what is one lead worth to you?
How many sales a month close in your CRM that your ads never hear about?
The last question is the one that matters most. When the ads only see form fills, they learn to find more people who fill in forms, not people who buy. A bigger pipe does not change that. Sending the sale does.
An enterprise pipe with bots in it is still teaching your ads the wrong lesson.
Every feature, side by side
Every DataCops feature, against what mParticle offers for the same need. m
mParticle | ||
|---|---|---|
| Setup | ||
| What you install | One script and one DNS record, server-side from your subdomain | SDKs plus a data plan |
| Connect ad platforms | One click each: Meta, Google Ads, TikTok, LinkedIn | Connections you set up and map |
| Destinations | Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest, X | 300+ tools, warehouses included |
| Mobile apps and warehouse pipelines | Not built for it | Yes |
| Data quality | ||
| Bot handling | Verdict per visit, Real people only per platform | None found on its pages |
| What happened to each ad click | Click log in first-party analytics | Possible if you build the report |
| One person across devices | Not built for it | Identity resolution into one profile |
| Audiences | Not built for it | Predicted value, lookalikes, suppression |
| Consent manager | Built in, IAB TCF v2.2 | Needs your own consent tool |
| Beyond the website | ||
| CRM stages to ad platforms | HighLevel native, any CRM by webhook | A flow you build |
| Signups via Sign in with Google | SignupCops keeps the ad click | None found |
| Upload past customers to warm up ads | Ads Warmup, up to 20,000 rows | Through its audience tools |
| Meta health and wellness restrictions | Health mode | None found |
| Privacy and legal | ||
| Visitors asking for deletion | Self-serve form, confirmed by email, status page | None found as a self-serve form |
| Deletion requests from Meta, TikTok, LinkedIn | Acted on automatically | None found |
| Security certificates | Not listed | SOC 2 Type II, ISO 27001, PII detection |
| Running it | ||
| Why each event was sent or skipped | Per-row delivery log with the reason | None found per row |
| Agencies with many clients | Agency board: every client on one login | None found |
| Large enterprise data teams | Built for small teams and agencies | Built for them |
mParticle column from mparticle.com, rokt.com and docs.mparticle.com, 2 October 2026. "None found" means we did not see it on the pages we read; a data team can build much of it on mParticle.
The 5 mParticle alternatives compared
| Best for | Type | Bots kept out | CRM sales | |
|---|---|---|---|---|
| Ad tracking for SMBs and agencies | Tracking solution | Verdict + switch | Native | |
Segment | Product and engineering teams | CDP | Not stated | You build it |
RudderStack | Warehouse teams | Warehouse CDP | Not stated | You build it |
Tealium | Large regulated enterprises | Tag manager + CDP | Not stated | You build it |
Stape | Cheap GTM hosting | Server-side GTM host | Bot score you wire in | Store apps (Pro+) |
Segment, RudderStack and Tealium paid prices change often and were not re-checked this month; see each vendor's pricing page.
1. DataCops: best mParticle alternative for ad tracking
DataCops is not a smaller mParticle. It does a different job: the whole tracking chain for your ads. Conversions go server-side from your own subdomain. Every visit gets a bot verdict. Consent is checked by a built-in manager. The stages after the form come from your CRM, matched to the click. And every event has a row that says what happened and why.
Why people switch to it
- No data team needed
- Real people only keeps bots out of each platform
- Booked, showed, won and paid from HighLevel or any CRM
- Public price and a free plan
Worth knowing
- No audiences or cross-device profiles
- Real people only is off until you switch it on
Best for: teams whose goal is ads that learn who actually buys.

2. Segment: best CDP for product teams
Segment is the best-known CDP and the most direct swap if you want to keep the CDP model. It has a long list of connections and many engineers already know it.
The catch is the same as mParticle's. It moves data; it does not decide which leads are real or send your CRM stages without a build. See our Segment alternatives guide.
Why people switch to it
- Keeps the CDP model
- Widely known by engineers
Worth knowing
- Still a pipe you build
- Bots and CRM stages are still your job
Best for: teams that want a CDP with an easier start than mParticle.

3. RudderStack: best for warehouse teams
RudderStack is built around your own data warehouse. If your team already runs Snowflake or BigQuery and wants the data to live there first, it is a natural fit.
It still needs engineers to set up and run, and the ad tracking jobs (bots, consent, CRM stages) are still yours to build.
Why people switch to it
- Your warehouse is the centre
- Fits a Snowflake or BigQuery setup
Worth knowing
- Needs a data team
- No ready-made ad tracking layer
Best for: teams whose warehouse is where everything lives.

4. Tealium: best for large regulated enterprises
Tealium is mParticle's closest peer: enterprise, quote only, aimed at large companies. It adds a tag manager next to the CDP, which some large teams want in one contract.
It is just as heavy to buy and to run. See our Tealium alternatives guide.
Why people switch to it
- Tag manager and CDP from one vendor
- Enterprise contract and support
Worth knowing
- Quote only, enterprise contract
- Same build work as mParticle
Best for: swapping one enterprise platform for another.

5. Stape: best for cheap server-side GTM hosting
If what you really wanted from mParticle was server-side conversions to Meta and Google, Stape is the cheapest route. It hosts your server-side Google Tag Manager container from your own domain.
You still build the container: tags, triggers, bot rules and CRM apps. See our Stape alternatives guide.
Why people switch to it
- Low, public price
- Server-side from your domain
Worth knowing
- Needs a GTM specialist
- Bots and CRM stages are still your job
Best for: teams that know GTM and only need a cheap host.
Looking at other pipes? Compare Hightouch alternatives for reverse ETL and TAGGRS alternatives for GTM hosting.
How to choose an mParticle alternative
- Name the goal. Profiles and audiences point to a CDP. Better ad results point to a tracking solution.
- Check where your sales close. If it is in a CRM or on a call, you need those stages sent to the ads, matched to the click.
- Look at your traffic. If bots fill your forms, you want them stopped before the ads see them.
- Count your people. A CDP needs a data team. If you do not have one, it will sit half built.
- Ask for the full price. Licence plus the hours to build and keep it running.
When not to use DataCops
- Keep mParticle only if you use it for a full CDP. DataCops covers the tracking, bot filtering, consent and ad conversion job. If your team also relies on mParticle for that other work, run both and send each ad conversion from one place only.
- You need custom tag logic or non-ad destinations. DataCops sends to ad platforms. If you feed other tools from a server container or pipeline, keep it for those.
What's your actual goal?
If you are here for ad tracking, you want five things:
- Capture every lead and sale, including the ones ad blockers and Safari hide.
- Send them to your ad platforms, so Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X learn who buys.
- Include the sales that happen offline, on a call, in a clinic, in your CRM.
- Keep bots out, so the platforms do not learn from fake leads.
- Stay compliant, with consent checked and data deleted on request.
mParticle gives your engineers a platform to build that. DataCops is the finished result. Here is the same goal, done both ways.
The traditional way, with mParticle
- Sign a contract after a sales process.
- Install the SDKs on your site and apps.
- Design a data plan: events, fields, rules.
- Set up and map each ad platform connection.
- Buy a consent tool and wire its choices into mParticle.
- Build your own bot rules, or send bots through.
- Build the CRM flow for offline sales and match them to clicks.
- Keep all of it working as platforms change.
With DataCops
- Add one script and one DNS record.
- Connect Meta, Google Ads, TikTok, LinkedIn and X with one click each, and Microsoft Ads, Reddit and Pinterest with an API key.
- Switch on the consent manager.
- Switch on Real people only.
- Connect HighLevel or your CRM webhook.
Then run your business. Click IDs are kept for 90 days and every event has a delivery log row.
mParticle gives your data team a platform. DataCops gives your ads the right data, today.
Why people leave mParticle
mParticle is a serious product. People leave when what they needed was smaller and more specific.
- No public price. Every plan is a quote. There is no free tier to try it first.
- It is an engineering project. SDKs, data plans and connections take a data team to build and to own.
- Bots go through. We found no bot or datacenter filtering on its pages. Fake leads reach the ads unless you build the filter.
- Consent is another vendor. It maps consent signals, but needs your own consent tool to collect them.
- The sale is still your build. Booked, showed and won stages need a flow you design and match to the click.
- Built for enterprises. Small teams and agencies pay for audiences and identity they never use.
Offline conversions: the job a pipe does not do by itself
Most businesses do not sell on the website. The website collects the lead. The money comes later, and that moment is what your ads need to learn from.
| Business | What the pixel sees | What DataCops adds |
|---|---|---|
| Clinics, dental, med spa | Booking form | Booked, showed, treatment paid |
| Home services, roofing, solar | Quote request | Estimate booked, job won with its value |
| Agencies running client ads | Form fills per client | Every client's booked, showed, won and paid |
| B2B and SaaS | Demo request, signup | Qualified lead, trial, paid, by webhook |
| Legal, finance, high-ticket services | Enquiry | Consult booked, client signed |
From HighLevel natively, or any CRM by webhook, directly or through Zapier, Make or n8n. Each sale is matched to the ad click by click ID or hashed email and phone.
- A visitor clicks your ad. DataCops keeps the click ID on your own domain for 90 days.
- The lead books, shows up or buys in your CRM, days or weeks later.
- DataCops finds the original click by click ID or the hashed email and phone.
- The stage goes to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X, counted once, with a delivery log row for each.
See offline conversions and HighLevel conversion tracking for the full picture.
Ads Warmup: tell the ads who pays
mParticle forwards what your site or store produces. A new ad account, pixel or campaign has nothing yet, so it pays to learn from scratch. That is a job a pipe cannot do, because the customers you already have never visit on command.
Ads Warmup, DataCops' flagship feature, sends them to your ad platforms before a campaign spends:
- Upload a customer list. A CSV of past buyers, old leads or booked calls. DataCops reads your columns; only email is required.
- See a match score for every person. An estimate from 0 to 10 from email, phone, name, location, click ID and customer ID, before anything is sent.
- Pick the event. Purchase, Lead, Complete registration, Add to cart or Schedule.
- Send server-side. Up to 20,000 people per upload to Meta, Google Ads and TikTok, with a sent, skipped or failed result per person. Google Ads credits only people who clicked a Google ad.
Each row is dated when you press send, not with the old sale date, so it gives a new campaign real customers to learn from on day one. Preview is free; sending needs a paid plan.
What else a pipe never does
- Capture at the edge. With DNS on Cloudflare, the free, optional DataCops Cloudflare Worker reads click IDs and UTMs off the first request, before the page or any script runs. It captures; it does not block.
- Keep the click on the server. gclid, wbraid, gbraid, fbclid, ttclid and li_fat_id are stored for up to 90 days, so a deal that closes weeks later still finds its click. A signed server-set cookie lasts up to 400 days where enabled.
- Check the lead's email. Fixed rules, not guesses: disposable providers, domains with no mail server and an email risk score. With LeadCops (Business and up), a lead that fails is held and never billed.
- Install on Shopify. The DataCops Shopify app adds a web pixel and a theme app embed, so every paid order reaches your ads, express checkouts included. See Shopify Conversions API.
- Hand evidence to Google. On the Organization plan, the fraud refund report exports bot-flagged Google Ads clicks in the format Google's Click Quality form asks for. You attach it; Google decides.
Meta health and wellness restrictions
If you advertise a clinic, a treatment, a supplement or anything health related, Meta may restrict the events it accepts from you. What usually gets an account restricted is the data itself: the page link names the treatment, the event is called Book_Implant_Consult, the form sends symptoms.
With mParticle, keeping that out is a data plan job: your team writes the rules that strip URLs, rename events and drop fields for Meta, and updates them for every new form.
With DataCops, you switch on health mode. It sends only fields on an approved list and holds back the rest. Page links are cut to the domain and event names go neutral, like L_1.
Read more on Meta health and wellness restrictions.
Setup, step by step, side by side
Here is the same job done both ways.
| The job | With mParticle | |
|---|---|---|
| Get started | Request pricing, go through sales, sign a contract. | Sign up free, up to 2,000 sessions. |
| Collect events | Install the SDKs, design a data plan, name events and fields. | Add one script and one DNS record. |
| Connect Meta and Google Ads | Set up each connection, map events and user fields, forward consent. | Connect the account. Google Ads actions are created as secondary. |
| Handle consent | Bring your own consent tool and map its choices to Consent Purposes. | Switch on the built-in consent manager (IAB TCF v2.2). |
| Keep bots out | Build your own filtering. None found built in. | Switch on Real people only for each platform. |
| Send a CRM sale | Build a flow from the CRM, match it to the click, test it. | Install once on HighLevel and pick the clients, or post the sale to your webhook. |
| Find out why a conversion is missing | Check the connection's logs and the platform's tools. | Open the delivery log row. The reason is written next to it. |
Every mParticle step is doable, and data teams do them daily. The point is who does them, and whether your goal needs them.
"15 minutes to get server-side tracking live. After 3 days failing with another app and a DIY server-side Google Tag Manager, that alone sold me. Then support jumped on a Google Meet with me on a Sunday afternoon to finish the job."Andrew Forsyth, Chief Executive Officer, Zeald
One tool where mParticle is one part
mParticle covers one job. Ad-funded businesses usually pay for four or five tools to get from a click to a clean conversion. DataCops runs that whole chain from one script on your own domain:
- Consent. A banner built to the IAB TCF v2.2 standard, Google Consent Mode v2 on by default, and a server check of the visitor's choice before every send.
- Bots kept out. Every visit gets a verdict. Real people only, switched on per platform, keeps bot and datacenter conversions away from your ads.
- Every platform, counted once. Conversions go server-side to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X, with one event ID so the pixel and server copies count once.
- The sale after the form. Booked, won and paid stages from HighLevel or any CRM go back to the ad click that started them.
- A record of every send. The delivery log shows each conversion as sent, held, skipped or failed, with the reason.
- Click fraud, on Organization. Repeat bot IPs are challenged or blocked at your Cloudflare edge, and flagged Google Ads clicks export as refund evidence for Google's Click Quality Form.
What to know before you switch
- Keep mParticle only if you use it for a full CDP. DataCops covers the tracking, bot filtering, consent and ad conversion job. If your team also relies on mParticle for that other work, run both and send each ad conversion from one place only.
- Pick the plan for your busiest month. Free covers 2,000 sessions. Sessions over the plan are skipped until you upgrade or the month resets.
- Switch Real people only on from day one. It is set per ad platform and starts off on a new site.
Moving from mParticle to DataCops
- Add DataCops next to mParticle. One script and one DNS record. Leave mParticle running.
- Connect the same ad accounts, and send each conversion from one place only. Turn off those outputs in mParticle, so nothing counts twice.
- Compare for two weeks in Meta Events Manager and Google Ads: conversions, match quality, and what DataCops skipped as bots.
- Connect your CRM (HighLevel or your webhook) to add booked, showed, won and paid.
- Decide what mParticle still does. Keep it for audiences and the warehouse, or wind it down at the end of your contract.
Every DataCops product mentioned here
- Offline conversions: CRM sales and stages back to your ads.
- HighLevel conversion tracking and DataCops for agencies.
- Server-side tracking and the no-GTM alternative.
- Meta Conversions API, Google Ads conversion tracking, TikTok Events API, LinkedIn Conversions API.
- Click fraud protection, SignupCops and first-party analytics.
- Consent manager, Ads Warmup and health mode.
mParticle alternatives: FAQ
Can I warm up a new campaign with my existing customers?
Yes, with DataCops Ads Warmup. Upload a CSV of past buyers, old leads or booked calls (only email is required, up to 20,000 rows), see a match score from 0 to 10 for every person, and send them to Meta, Google Ads and TikTok as fresh signal, dated when you send. Google Ads credits only people who clicked a Google ad. Preview is free; sending needs a paid plan.
When should I keep mParticle instead of switching?
Keep mParticle only if you use it for a full CDP. DataCops covers the tracking, bot filtering, consent and ad conversion job. If your team also relies on mParticle for that other work, run both and send each ad conversion from one place only.
What is the best mParticle alternative?
DataCops, because it replaces mParticle plus the rest of the ad tracking stack in one tool: first-party tracking from your own subdomain, a bot verdict on every visit, a built-in consent manager, and conversions and CRM sales sent server-side to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X. It is free up to 2,000 sessions. If what you need from mParticle is a full CDP with mobile SDKs, profiles and audiences, Segment, RudderStack or Tealium are the closest CDPs.
Is mParticle now part of Rokt?
Yes. Rokt bought mParticle, and the product is now sold as Rokt mParticle.
Does mParticle send conversions to Meta and Google Ads?
Yes. It has server-to-server connections for Google Ads, Google Enhanced Conversions (including for Leads) and Meta's Conversions API. You set up which events go and how their fields map.
Does mParticle filter bots?
We found no bot, datacenter, VPN or proxy filtering on the mParticle pages we read. Events flow to the connected tools as they arrive. DataCops gives every visit a bot verdict and, with Real people only switched on for a platform, keeps flagged visits out of it. The switch is off by default.
Does mParticle have a consent manager?
mParticle has configurable consent controls and maps its Consent Purposes to Google's ad_user_data and ad_personalization fields. We found no consent banner or IAB TCF manager of its own, so it needs your own consent tool. DataCops includes a first-party consent manager built on IAB TCF v2.2, and website events wait for consent.
Is DataCops a CDP?
No. DataCops does not build customer profiles, audiences or warehouse pipelines. It is a tracking solution: it captures the ad click, keeps bots out, checks consent and sends the right conversions, including CRM stages, to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X.
Can I use DataCops and mParticle together?
Yes. Many teams keep a CDP for audiences and warehouse data and let DataCops handle ad conversions. Just send each conversion to each ad platform from one place only, so nothing counts twice.