CRM
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
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
| LeadSquared field | Lives on | What Attribi does with it |
|---|---|---|
ProspectStage | Lead | Not read. Changing it uploads nothing. |
EmailAddress | Lead | The key that matches the Opportunity's Lead to a lead Attribi holds, or creates one. |
Phone | Lead | Written in full mode when the tracker captured one. Not read on the revenue pull. |
mx_MTA_clickid, mx_MTA_clickid_type | Lead | Read back as a pair when the Opportunity moves. Your form fills them; Attribi never writes them. |
| Status: Open, Won, Lost | Opportunity | Not consulted on its own. The stage name beside it decides. |
Stage (mx_Custom_2 in LeadSquared's examples) | Opportunity | Classified by name: your list first, lost-style words refused, won-style words accepted. |
| Amount (a numeric custom field) | Opportunity | The conversion value. Blank or zero uploads no revenue. |
| Currency | Opportunity, else the connection | A code on the Opportunity wins; otherwise the currency you typed when connecting; neither, and the upload is withheld, not guessed. |
ModifiedOn | Opportunity | The 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.
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:
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.
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.
| Fields | Schema names Attribi expects | Type and length |
|---|---|---|
| Identity | mx_MTA_Visitor_ID, mx_MTA_Lead_ID | Text, 64 |
| First touch | mx_MTA_First_Touch_Source, mx_MTA_First_Touch_Medium, mx_MTA_First_Touch_Campaign, mx_MTA_First_Touch_At | Text, 100, 100, 255, 64 |
| Last touch | mx_MTA_Last_Touch_Source, mx_MTA_Last_Touch_Medium, mx_MTA_Last_Touch_Campaign | Text, 100, 100, 255 |
| Journey | mx_MTA_Touchpoint_Count, mx_MTA_Attribution_Path | Number; Text as TextArea, 1300 |
| Entry context | mx_MTA_First_Landing_Page, mx_MTA_First_Referrer | Text as TextArea, 1300 |
| Reference | mx_MTA_Attribution_URL | Text as TextArea, 1300 |
| Click ID, filled by your form | mx_MTA_clickid, mx_MTA_clickid_type | Text, 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.
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 in | API host to paste |
|---|---|
| India (Mumbai) | api-in21.leadsquared.com |
| India (Hyderabad) | api-in22.leadsquared.com |
| Middle East | api-me61.leadsquared.com |
| Singapore | api.leadsquared.com |
| United States | api-us11.leadsquared.com |
| Ireland | api-ir31.leadsquared.com |
| Canada | api-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.
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.
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.
gclid into mx_MTA_clickid and the word gclid into mx_MTA_clickid_type; the form creates the Lead with an email.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.
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.
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.
Stages Attribi supports for LeadSquared.
CRM
Freshsales ad attribution: won deals upload to your ad platforms in the deal’s own currency. Setup needs 16 custom fields you create by hand first.
CRM
Salesforce offline conversion tracking: won Opportunities upload to Meta (Facebook), LinkedIn and your other ad platforms as revenue, using your own stage names.
Ad platform
Google Ads offline conversion tracking: send qualified leads and closed-won revenue from your CRM, so your account sees CRM-verified outcomes, not just form fills.
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.
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.
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.
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.
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
Sign up and connect it from the Connections page.
Start FreeNo credit card · Free up to 500 visitors a month