CRM

LeadSquared attribution, from a won Opportunity to your ad platforms

Attribi creates its sixteen attribution fields on your LeadSquared Lead object through LeadSquared’s field API when you click Provision, reads the schema back to confirm every name, and only then starts moving data. If your account refuses that call, it lists the fields for your administrator to add by hand. After that it runs unattended. Opportunities that reach a stage you count as won become closed-won conversions on every ad platform you have connected, carrying the deal amount in the currency you set, and campaign history travels onto the Lead record for your counsellors to see.

No credit card required · 5-minute setup

What Attribi does with LeadSquared

Won Opportunity revenue upload

Imports

An Opportunity that reaches a won stage becomes a closed-won conversion with its amount attached, in the deal currency you set when connecting. Stages that read as lost, rejected, cancelled or abandoned are never counted, and if your won stage carries a name that does not read as a win, you give us the exact names and those become the only ones that count.

Qualified stages, matched exactly as you type them

Imports

List the Opportunity stage names your team treats as qualified and each one fires a qualified conversion. The match is exact and case sensitive, so Sales Qualified and sales qualified are two different things here. Leave the list empty and qualified reporting is simply off while won deals keep flowing.

Attribution written onto the Lead

Sends

Once the fields pass verification, Attribi fills fourteen of them as leads convert: the visitor id and lead id, the first and last touch source, medium and campaign, the first touch time, the touch count, the full attribution path, the first landing page and referrer, and a link back to the journey in Attribi. Until verification passes nothing is written at all, which is deliberate: a half-provisioned schema silently dropping values is worse than an obvious stop.

Click ID recovery with no script on your site

Imports

Two of the sixteen fields exist for your own landing page forms to fill with the ad click ID and the parameter it arrived on. Attribi never writes those two, it reads the pair back off the Lead when an Opportunity moves, which is what keeps click-level matching alive for a customer running no tracker.

Your LeadSquared region, and no app to approve

Sends

LeadSquared runs on regional API hosts, so you paste yours along with an Access Key and Secret Key from your own account. There is no OAuth app for your IT team to review and no consent screen, and requests never leave the region your account lives in.

Setting up LeadSquared

  1. 1

    Let Attribi add the sixteen fields to your Lead object

    Click Provision fields after connecting. Attribi reads your Lead field schema, creates any of the sixteen mx_MTA fields that are missing through LeadSquared’s CreateLeadField API (text boxes sized to each value, long text for the attribution path, landing page, referrer and attribution URL, a number for the touchpoint count), then reads the schema again and confirms every name. The keys you connect with need field-creation rights, so use an administrator’s keys. If LeadSquared answers that call with 404 on your account, Attribi lists the missing fields by name for your administrator to create under Settings, Customization, Lead Fields.

  2. 2

    Connect with your region host and API keys

    Paste your API host, such as api-in21.leadsquared.com, plus the Access Key and Secret Key from your LeadSquared account. Enter the currency your deals are booked in, such as INR, and choose whether Attribi may create Leads that LeadSquared does not already hold, or should only enrich records you already own. Then click Provision fields. Attribi reads your live field schema and either confirms all sixteen or names the ones still missing.

  3. 3

    Tell us which stages mean qualified, and which mean won

    Type your qualified Opportunity stage names in the connection panel, comma separated and spelled exactly as LeadSquared does. Won stages need nothing if yours are named conventionally. If they are not, send us the exact names during onboarding and they become the definitive list. There is no won-stage picker in the product yet, so this one step goes through us rather than a screen.

LeadSquared marks a deal won in a Status field. Attribi reads the stage name next to it

LeadSquared attribution in Attribi reads Opportunities, not the Lead Stage. When an Opportunity's stage name reads as won, or matches a name you give us, its amount uploads to your ad platforms as a closed-won conversion in the currency you set. Sixteen mx_MTA custom fields on the Lead, your Access and Secret Keys, and your regional API host come first.

How does LeadSquared model a won deal, and which record does Attribi read?

A LeadSquared Opportunity is a deal record created under an Opportunity Type you configure, with a Status that is always Open, Won or Lost and a Stage name you choose for each Status; Attribi reads the Opportunity's stage name and amount, and never the Lead's ProspectStage.

The Lead carries a Lead Stage, schema name ProspectStage, shipped as Prospect, Opportunity and Customer and editable under Settings, Leads, Lead Stages (LeadSquared help, checked 12 October 2026). It is a label with no amount and no close date.

The Opportunity belongs to an Opportunity Type (Admission, Site Visit, Home Loan). Its Status is fixed at Open, Won or Lost, which LeadSquared says you cannot edit or add to, and beside it sits a Stage dropdown whose options depend on the Status (Opportunity Configurations). In LeadSquared's API examples the Opportunity Name is mx_Custom_1, the Stage is mx_Custom_2, and the amount is a numeric custom field such as mx_Custom_6; schema names are assigned per type (metadata per Opportunity Type).

Attribi reads the Opportunity because only the Opportunity has an amount and a date to put on a conversion. Moving a Lead to Customer books nothing.

The data path between LeadSquared and Attribi: the Lead with ProspectStage, EmailAddress, Phone, the two click ID fields your form fills and the fourteen mx_MTA fields Attribi writes; the Opportunity with its fixed Status, Stage name, amount and ModifiedOn; and the closed-won conversion leaving for the ad platforms.

LeadSquared fieldLives onWhat Attribi does with it
ProspectStageLeadNot read. Changing it uploads nothing.
EmailAddressLeadThe key that matches the Opportunity's Lead to a lead Attribi holds, or creates one.
PhoneLeadWritten in full mode when the tracker captured one. Not read on the revenue pull.
mx_MTA_clickid, mx_MTA_clickid_typeLeadRead back as a pair when the Opportunity moves. Your form fills them; Attribi never writes them.
Status: Open, Won, LostOpportunityNot consulted on its own. The stage name beside it decides.
Stage (mx_Custom_2 in LeadSquared's examples)OpportunityClassified by name: your list first, lost-style words refused, won-style words accepted.
Amount (a numeric custom field)OpportunityThe conversion value. Blank or zero uploads no revenue.
CurrencyOpportunity, else the connectionA code on the Opportunity wins; otherwise the currency you typed when connecting; neither, and the upload is withheld, not guessed.
ModifiedOnOpportunityThe cursor. Only Opportunities modified since the last complete run are read.

A stage filed under Won but named Deposit Received says "won" nowhere in its name. Attribi will not count it until you tell us that name.

What was wrong with won detection before 7 August 2026, and what do you configure now?

The first version of this connection accepted any stage containing the word closed. "Closed Lost" contains it. Lost deals were booked as revenue and would have gone to every connected ad platform as closed-won conversions. No LeadSquared customer existed, so nothing left the building, and this integration's public page was withheld until the fix merged on 7 August 2026, the only page Attribi has ever declined to publish.

The rule now is one shared function on both read paths, three outcomes in a fixed order:

  1. If you have given us won stage names, only those count. The match is exact after trimming, and case-sensitive. "Fee Paid" and "fee paid" are different strings.
  2. Otherwise, any stage carrying a lost-style word is refused first: lost, rejected, declined, disqualified, abandoned, cancelled, dead, dropped, churned, withdrawn, expired, failed, junk, duplicate, void, refunded.
  3. Otherwise, the stage must carry a won-style word: won, win, wins, converted, conversion. "Closed" alone is not one, because it appears in both Closed Won and Closed Lost.

The three checks in order, and LeadSquared's own documentation stage names with the outcome each receives: Closed - Won is won, Prospecting and Decided not to buy are not, Closed Lost is refused, Fee Paid is not won until configured.

The one case the rule cannot protect you from is a Lost stage that contains a win word, "Won by competitor" say. Give us your won names and the list replaces the heuristic. Qualified stages have no heuristic: you type them into the connection panel, comma separated, spelled exactly as LeadSquared spells them. Won names are taken at onboarding; there is no won-stage picker here, a deliberate scope decision.

Who creates the sixteen mx_MTA fields, and what does LeadSquared do to their names?

An administrator, under My Account, Settings, Customization, Lead Fields, the screen LeadSquared points API users to for schema names (Get Metadata, checked 12 October 2026). LeadSquared derives a custom field's schema name from its display name by prefixing mx_ and replacing spaces with underscores, so "MTA Visitor ID" becomes mx_MTA_Visitor_ID (Create a Custom Lead Field). Attribi compares schema names exactly.

FieldsSchema names Attribi expectsType and length
Identitymx_MTA_Visitor_ID, mx_MTA_Lead_IDText, 64
First touchmx_MTA_First_Touch_Source, mx_MTA_First_Touch_Medium, mx_MTA_First_Touch_Campaign, mx_MTA_First_Touch_AtText, 100, 100, 255, 64
Last touchmx_MTA_Last_Touch_Source, mx_MTA_Last_Touch_Medium, mx_MTA_Last_Touch_CampaignText, 100, 100, 255
Journeymx_MTA_Touchpoint_Count, mx_MTA_Attribution_PathNumber; Text as TextArea, 1300
Entry contextmx_MTA_First_Landing_Page, mx_MTA_First_ReferrerText as TextArea, 1300
Referencemx_MTA_Attribution_URLText as TextArea, 1300
Click ID, filled by your formmx_MTA_clickid, mx_MTA_clickid_typeText, your choice

The last two names are lower case after the prefix, mx_MTA_clickid and not mx_MTA_Click_ID, because that is the pair Attribi reads back. The four long fields hold a journey path or a tagged landing URL, which outrun LeadSquared's default 60-character text box, so set them to TextArea with a max length of at least 1,300.

LeadSquared does document an API for creating a custom lead field. Attribi does not call it today. Provision fields reads your live field list, compares schema names against the sixteen, and either confirms them all or stops and names the missing ones. Until that passes, nothing is written to LeadSquared.

Whose API keys go into Attribi, which host, and how much quota does it use?

LeadSquared's keys are per user, generated under My Profile, Settings, API and Webhooks, API Access Keys, where the Host URL is also shown (LeadSquared help, checked 12 October 2026). Every call runs with that user's permissions. LeadSquared recommends an Admin user's keys and warns that deactivating a user deactivates the keys (Authentication), so a counsellor who leaves takes the sync with them. Create a dedicated admin user for integrations. Attribi sends the keys on the query string over HTTPS, only to a host ending in leadsquared.com. There is no OAuth app and no consent screen.

Region your account was created inAPI host to paste
India (Mumbai)api-in21.leadsquared.com
India (Hyderabad)api-in22.leadsquared.com
Middle Eastapi-me61.leadsquared.com
Singaporeapi.leadsquared.com
United Statesapi-us11.leadsquared.com
Irelandapi-ir31.leadsquared.com
Canadaapi-ca12.leadsquared.com

Source: API Host, checked 12 October 2026. The wrong host returns 401 Unauthorized with the correct host named in the message.

Full mode sends a new lead through Lead.Capture, which matches on ProspectId, then email, then phone, and posts a Lead Capture activity on every success, so the key's user needs create-lead and create-activity permission (Capture Leads). Attribution-only mode updates the mx_MTA fields on a Lead found by email and does nothing when none exists. In either mode a lead captured with a phone and no email never reaches LeadSquared.

Rate limits are by plan (Rate Limits, checked 12 October 2026): Pro allows 10 standard calls every 5 seconds and 10,000 a day plus 1,000 per user; Super allows 20 every 5 seconds and 100,000 a day. Endpoint pages still print an older 429 text, "API calls exceeded the limit of 25 in 5 second(s)". Attribi's footprint: the pull reads modified Opportunities in pages of 200 and makes one Lead lookup per Opportunity that is won or on your qualified list; writing attribution is two calls, a lookup and an update or capture. A run cut short keeps the pages it read, leaves the cursor behind the unread ones, and the next scheduled run re-reads the window. A lead already marked won is never marked again.

Why does a phone without a country code fail to match on Meta, and what do you set in LeadSquared?

Most LeadSquared accounts are phone-first, and an Indian mobile is ten digits. Meta's rule for hashed phones is to remove symbols, letters and leading zeros and include the country code. Attribi hashes the digits as typed, so "98765 43210" goes out with no 91 in front and Meta cannot match it. The Google and TikTok paths prepend a plus sign to bare digits, which is right only when the digits already began with the country code; Microsoft skips the number. In every case the upload reports success. Nothing in Attribi knows a workspace's country yet; it is an open item, and until it is built, collect phones in international format.

LeadSquared can enforce that on its own forms. Phone Control, set per field under Settings, Leads, Lead Fields by an admin, restricts Phone and Mobile to digits within a length you choose. Marking the field unique adds a "Country Code Is Mandatory" checkbox and an "If Not Provided" choice between rejecting the lead and applying a default country code (How to Avoid Creating Duplicate Leads, checked 12 October 2026). LeadSquared's examples store the result as +91-9988776655.

One limit: on the revenue pull Attribi reads the Lead's EmailAddress and the click ID pair, not Phone. The phone that gets hashed is the one your own website form sent, if the tracker is installed, so that is the number to collect as +91.

A worked example: enquiry to enrolment to Google Ads

The numbers are illustrative. A coaching institute runs Google Ads for a JEE batch, books fees in INR, and has an Opportunity Type called Admission whose Won status holds one stage, Fee Paid.

  1. On 2 September a parent clicks the ad. A hidden field writes the gclid into mx_MTA_clickid and the word gclid into mx_MTA_clickid_type; the form creates the Lead with an email.
  2. On 9 September a counsellor creates an Admission Opportunity at 185,000, Status Open, Stage Counselling.
  3. On 13 October, day 41, the fee lands. Status becomes Won and the Stage becomes Fee Paid.
  4. The institute gave Attribi "Fee Paid" at onboarding, so on the next scheduled pull the Opportunity classifies as won. Attribi reads the Lead for the email and the click ID pair, finds no currency code on the Opportunity, and uses INR from the connection.
  5. Attribi marks the lead closed won at 185,000 INR and uploads through Google's Data Manager API: the gclid, the hashed email, conversionValue 185000, currencyCode INR, and a transaction ID built from the lead and the stage so a re-run cannot create a second conversion.

Google accepts a click up to 90 days old. But a conversion action Attribi creates for you uses a 30-day click-through window today, so day 41 is recorded and attributed to nothing; a change raising it to 90 days is written and unmerged as of 12 October 2026. For an admissions cycle, map an action of your own with a 90-day window, or tell us before the first pull. Sales cycles longer than 90 days covers what happens past that point; the Google Ads page covers the Data Manager route.

What does LeadSquared attribution in Attribi not do?

  • Without the tracker each lead carries one synthesized touch, so none of the five attribution models has a second touch to weigh. The lead, qualified and closed-won stages still upload.
  • When the primary Opportunity read is unavailable, Attribi falls back to re-checking leads it already holds. That path imports no new leads, so the first pull after connecting is the one to check with us.
  • Opportunity schema names are assigned per Opportunity Type, so the stage and amount fields Attribi reads are confirmed against your account at onboarding, not assumed.
  • A won Opportunity with a blank or zero amount uploads no revenue; one with an unknown currency is held, not guessed.
  • Rename a stage in LeadSquared and it silently stops matching until you update the list.
  • CRM connections start on the Growth plan at 99 dollars a month.

Common questions about this connection

Does Attribi read the LeadSquared Lead Stage, the ProspectStage field, or the Opportunity stage? The Opportunity stage. ProspectStage is never read, because it carries no amount and no close date. A team that records a sale only by moving the Lead to Customer uploads nothing.

Our won stage is called Fee Paid. Will Attribi count it? Not on its own, because the name contains no win word. Give us "Fee Paid" at onboarding and it becomes the only name that counts, matched exactly. Until then those deals show as open, which under-reports revenue but never fabricates it.

Which LeadSquared user's keys should we paste into Attribi? A dedicated admin user created for integrations. Every call runs with that user's permissions, and deactivating the user deactivates the keys. Full mode also needs create-lead and create-activity permission.

Do we need LeadSquared's Phone Control turned on for Attribi to work? No, but turn it on. The revenue pull matches by email and click ID and does not read the Lead's phone. The phone your website form sends to Attribi should carry the country code for the same reason Phone Control exists.

Does Attribi count against our LeadSquared API rate limit? Yes, against the plan limit shared by all your integrations: 10 calls every 5 seconds on Pro, 20 on Super. A pull costs one page call per 200 modified Opportunities plus one Lead lookup per won or qualified Opportunity; a push costs two calls per lead.

Can Attribi create the mx_MTA fields through LeadSquared's CreateLeadField API? Yes, since 12 October 2026. Provision fields reads your Lead field schema, creates each missing field through that endpoint with a display name that produces the schema names above, and reads the schema again before it marks the connection ready. Use an administrator's keys, since field creation needs that right. An account that answers the call with 404 gets the list of fields to create by hand instead.

The takeaway

In LeadSquared the thing that makes a deal real is the Opportunity, and the thing that makes it readable is a stage name you chose. Create the sixteen fields with the exact names, paste an admin user's keys and your region's host, state your currency, and tell us what your won stage is called. From there a Fee Paid becomes a closed-won conversion carrying its amount on every ad platform you have connected. Every new workspace gets 30 days on the Pro plan with no card, long enough to watch one admissions cycle come back as revenue.

Funnel stages

Stages Attribi supports for LeadSquared.

  • Lead
  • Qualified
  • Closed Won

Works with

Frequently asked questions

Does Attribi create the sixteen LeadSquared fields, or do we?

Attribi creates them, through the CreateLeadField endpoint LeadSquared documents, one call per missing field, and then re-reads the schema so the flag is set only when all sixteen exist under the exact names it writes to. Two things can still put the work on your administrator: an account that answers the create call with 404, and a field that LeadSquared files under a different schema name than expected. In both cases Attribi stops, names the fields, and nothing is written to LeadSquared until the check passes.

How does Attribi decide a LeadSquared Opportunity is won?

If you have given us your won stage names, those are the only stages that count, matched exactly. That is the setting to use when your pipeline ends somewhere like Booking Confirmed or Agreement Signed, and it is the same setting the Salesforce connection uses. If you have given us nothing, Attribi recognises the ordinary names, Closed Won, Won and Converted among them, and refuses anything that reads as lost, rejected, cancelled, disqualified or abandoned. A stage named only Closed is treated as not won, because on its own that word says nothing about the outcome. Two more things worth knowing: there is no won-stage picker in the product yet, so unusual names are configured with us at onboarding, and a won Opportunity with a blank or zero Amount is recorded but uploads no revenue conversion, because there is no figure to send.

Which LeadSquared fields does Attribi actually fill in?

Fourteen of the sixteen: the visitor id, lead id, first touch source, medium, campaign and time, last touch source, medium and campaign, the touchpoint count, the attribution path, the first landing page, the first referrer, and a link to the journey in Attribi. The other two, the click ID and the click ID type, are meant to be filled by your own forms and read back by Attribi, which is how the pixel-less path works. Create all sixteen, because verification checks for the full set and will not pass without them.

Will Attribi create Leads in our LeadSquared?

Only if you choose that when you connect. Full mode matches on email and creates the Lead when LeadSquared does not have one, then writes attribution onto it. Attribution only mode never creates anything: it looks the person up by email, updates the record if one exists, and does nothing at all if one does not. Either way the only fields Attribi writes are the mx_MTA_ ones you created for it, so your own data and your own automations are untouched.

Do we need the tracking script on our website?

Not for revenue. Qualified and closed-won outcomes are read out of LeadSquared on a schedule and uploaded to your ad platforms whether or not any script is installed, and a landing page form that captures the click ID keeps click-level matching too. What you give up without the script is the visit history: no page views and no multi-touch path, just the single touch Attribi can reconstruct from the Lead record. If you are running LeadSquared landing pages rather than your own, the click ID fields are the part worth setting up first.

Updated

Connect LeadSquared to Attribi.

Sign up and connect it from the Connections page.

Start Free

No credit card · Free up to 500 visitors a month