Skip to content
CoverMatch
COVERMATCH PARTNERS · DEVELOPER GUIDE

Quotes on your site in two minutes.

Apply, paste one line, and your customers can compare business insurance without leaving your site. The form works on your site immediately in test mode and goes live when we approve you, with nothing to change. Everything below is open to read; no login or request form.

Quick start

  1. Apply. You land in your partner portal with your snippet.
  2. Paste the snippet where the form should appear. It runs in test mode: the whole form works, nothing is sent to carriers, no request is saved.
  3. We approve you, usually within one business day. The same snippet goes live and your API key arrives by email.
<script src="https://covermatch.insure/embed.js" data-partner="YOUR_EMBED_KEY" data-credit="1" async></script>
<p class="covermatch-credit">Business insurance quotes powered by <a href="https://covermatch.insure">CoverMatch</a></p>

The form resizes itself to its content, works on phones, and only loads on the domains you list in the portal (once you list any).

The second line is a short "powered by CoverMatch" credit so your customers know who is quoting them; please keep it visible. Your portal's snippet already marks the link rel="sponsored" if you receive referral fees. Snippets without data-credit get the same line added by the script.

Embed options

Every option is a data- attribute on the script tag. All are optional.

AttributeWhat it does
data-modeinline (default) renders the form in place; modal renders a button that opens it; floating adds a button in the page corner.
data-targetCSS selector of the element to render into (inline mode).
data-label, data-colorButton text and color (#RRGGBB) for modal and floating modes.
data-business-name, data-describe, data-zipPrefill the first step. data-describe is a sentence about the business; we suggest the class from it.
data-linesCoverages to preselect, comma separated. Short codes: gl, bop, wc, pl, cyber, auto, umbrella, epli, liquor, do; the full names (general_liability, workers_comp, …) work too.
data-employees, data-payrollPrefill headcount and annual payroll.
data-contact-name, data-email, data-mobilePrefill the contact step. The customer still gives their own consent to be contacted.
data-refYour own id for this customer. It comes back in the portal, the API and every status webhook.
data-campaignTag the referral with a campaign name.
data-industryQuote one industry only, for an industry program such as an association's (for example restaurants). Your portal lists a ready snippet and link for each of your programs.
<!-- A button that opens the form, prefilled for a signed-in customer -->
<script src="https://covermatch.insure/embed.js" data-partner="YOUR_EMBED_KEY" data-mode="modal"
        data-label="Get business insurance quotes" data-color="#1F7A4D"
        data-business-name="Bright Spark Electric LLC" data-zip="07030"
        data-lines="gl,wc" data-employees="6" data-ref="cust_8812" data-credit="1" async></script>
<p class="covermatch-credit">Business insurance quotes powered by <a href="https://covermatch.insure">CoverMatch</a></p>

Site builders

WordPress

Edit the page, add a Custom HTML block, paste the snippet, update.

Wix

Add › Embed code › Embed HTML, choose Code, paste the snippet, then drag the box to full width.

Squarespace

Edit the page, add a Code block, paste the snippet, turn off "Display source".

Webflow

Drag an Embed element onto the page, paste the snippet, publish.

Shopify

Online Store › Themes › Customize, add a Custom Liquid section, paste the snippet, save.

React / Next.js

Render a div with an id, then load embed.js with data-target pointing at it (next/script with strategy "afterInteractive"), or use data-mode="modal" anywhere.

Your app (iOS / Android)

Open the tracked referral link from your portal in an in-app browser; it carries your attribution.

Email or print

Use the tracked referral link or the QR code from your portal.

Events

The script fires DOM events on document and calls listeners you register. The form only talks to your page's origin, and the script only accepts messages from CoverMatch.

  • covermatch:ready: the form loaded (detail.test is true in test mode).
  • covermatch:step: the customer moved to step 2, 3 or 4.
  • covermatch:submitted: the request is in. detail.referral_id and your detail.external_ref.
  • covermatch:waitlisted: the customer is in a state we do not serve yet.
  • covermatch:close: the modal was closed.
<script>
  document.addEventListener('covermatch:submitted', function (e) {
    // e.g. mark the task done in your onboarding checklist
    console.log('CoverMatch referral', e.detail.referral_id, 'for', e.detail.external_ref);
  });
  // Open the form yourself, with prefill:
  // window.CoverMatch.open({ zip: '07030', ref: 'cust_8812' });
</script>

Partner API

Base URL https://covermatch.insure/api/v1/partner. Send your key as X-Partner-Key. Keys are issued on approval and rotate from the portal. 120 calls a minute per key.

CallWhat it does
GET /meYour partner record, links, embed snippet and the webhook contract.
POST /leadsCreate a prefilled quote request (business, contact, lines, your external_ref, consent). Returns a resume link for the customer, or submits it when everything needed is there.
GET /referralsEvery customer you sent: status, counts and compensation.
GET /referrals/{id}One referral and its timeline.
GET /referrals-by-ref?external_ref=Referrals carrying one of your customer ids.
GET /industries?q=Search business types to prefill a lead.
POST /class-codesWorkers' comp class-code suggestions for job titles, with confidence. Suggestions only; the employer confirms.
POST /payroll-reportsOne pay period for a client you referred (see Payroll reports).
GET /payroll-reportsThe reports you sent and what happened to each.
POST /webhooksTell us about a business event at your customer (see Business events).
POST /webhook-testSend a signed test event to your webhook URL.
GET /webhook-deliveriesThe last 50 status updates we sent you.
curl -X POST https://covermatch.insure/api/v1/partner/leads \
  -H "X-Partner-Key: cmp_xxxxxxxx_..." -H "Content-Type: application/json" \
  -d '{
    "external_ref": "cust_8812",
    "business": { "name": "Bright Spark Electric LLC", "describe": "Residential electrician, 6 employees", "zip": "07030", "employees": "6" },
    "contact": { "name": "Dana Owner", "email": "[email protected]", "mobile": "+12015550123" },
    "lobs": ["gl", "wc"],
    "consent": { "accepted": true, "wording": "I agree CoverMatch may contact me about insurance quotes.", "at": "2026-10-25T14:03:00Z" }
  }'

Status webhooks (from CoverMatch to you)

Save an https URL in the portal and we POST each status change within about five minutes: referral.started, referral.submitted, referral.quoted, referral.bound, referral.lost, ping. Payloads carry status only, never customer names or prices. Failed deliveries are retried after 1 minute, 5 minutes, 30 minutes and 2 hours, and every attempt shows in the portal.

POST https://your-app.example.com/covermatch
X-CoverMatch-Event: referral.quoted
X-CoverMatch-Delivery: 9b1d…
X-CoverMatch-Signature: sha256=<hex HMAC-SHA256 of the raw body with your signing secret>

{ "id": "9b1d…", "type": "referral.quoted", "created_at": "2026-10-25T15:20:11+00:00",
  "data": { "referral": { "id": "…", "external_ref": "cust_8812", "source": "embed", "status": "quoted",
            "timeline": [ … ], "bound_policies": 0, "referred_at": "…" } } }
// Node: verify before trusting the payload
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.COVERMATCH_SIGNING_SECRET).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-covermatch-signature'] || ''));

Business events (from you to CoverMatch)

Tell us when something changes at a customer and we offer the right coverage at that moment: first_payroll_run, new_employee, new_location, new_vehicle, loan_approved, new_lease, contract_signed. Include the customer's email and the consent you captured. A CoverMatch customer sees the matching offer; someone new gets a prefilled invitation. Sign the raw body with your signing secret the same way as above.

Payroll reports (for payroll services)

Send a short summary after each pay period for a client you referred and their workers' comp stays sized to real payroll: prefilled renewals, an early warning before a big audit bill, and pay-as-you-go reporting to the carrier where the policy uses it.

  • Summary only: gross payroll and headcount by state and class code (or job title). We do not accept employee names, Social Security numbers or bank details, and anything extra is dropped.
  • The owner decides: the first report for a client is held, and we ask the business owner once to allow sharing. Nothing is used until they say yes; they can stop any time.
  • Class codes: send them if you have them. If you send job titles instead, we suggest codes once and the employer confirms.
  • No API needed: upload a CSV in the portal instead. Download the template.
curl -X POST https://covermatch.insure/api/v1/partner/payroll-reports \
  -H "X-Partner-Key: cmp_xxxxxxxx_..." -H "Content-Type: application/json" \
  -d '{
    "client_ref": "client-1042",
    "period_start": "2026-10-01", "period_end": "2026-10-15", "pay_date": "2026-10-17",
    "headcount_w2": 11,
    "lines": [
      { "state": "NJ", "class_code": "8810", "job_title": "Office staff", "gross_wages": 18250.00, "employees": 4 },
      { "state": "NJ", "class_code": "5645", "job_title": "Carpenters",   "gross_wages": 42100.50, "employees": 7 }
    ]
  }'
# 202 held_for_consent (first report, owner asked) · 201 applied · 404 unknown client_ref

Our commitments to you and your customers

  • No fees on top of the carrier's price for your customers, and no charge to you for leads or API calls.
  • We never sell your customers' information to lead companies.
  • You see status, never your customers' policy details, unless they give permission.
  • Quotes come from carriers we are appointed with, in the 23 states where we are licensed. Customers elsewhere join a waitlist.
  • Only policies CoverMatch services sit in a customer's CoverMatch wallet. A customer's existing policy moves here only when they sign a broker-of-record letter themselves.
  • Compensation, where offered, is a fixed referral fee per qualified lead (a completed quote request, whether or not the business buys), or a share of CoverMatch's commission for licensed partners, as set in your partner agreement. It comes out of CoverMatch's revenue, never your customer's premium. See how CoverMatch is paid.

CoverMatch is a trade name of Provident Financial Group, a licensed insurance agency (NPN 14304909). Coverage is available only in states where we are licensed. Quotes are from carriers we are appointed with and are subject to underwriting. We may receive compensation from carriers for policies sold.