HubSpot + Authorize.net integration

Authorize.net takes the card payment, keeps the customer profile and runs the recurring billing. What a HubSpot sync can carry from it, and what stays put.

Connects by API , iPaaS

Scope this integration Book a scoping call Estimate the cost

Is there an official Authorize.net + HubSpot integration?

No. Authorize.net has no app in the HubSpot App Marketplace as of September 2026, just fuzzy matches for its name, and HubSpot's own payments tool runs on Stripe. We recommend a custom API integration: signed Authorize.net webhooks, checked nightly against the reporting API, at 70 to 150 build hours. On every route, card numbers stay with Authorize.net; only ids, amounts, dates, statuses and the card brand reach HubSpot.

Recommended route
Custom API integration
Build effort
70 to 150 hours
In the HubSpot App Marketplace?
No listed app
Typical elapsed time
4 to 8 weeks

Marketplace checked September 2026.

Why teams connect Authorize.net to HubSpot

Authorize.net is a payment gateway, so it sits behind something else: a website checkout, a donation form, a membership renewal, a phone order keyed into its Virtual Terminal. The charge succeeds or fails inside the gateway, the customer profile and the recurring schedule live there too, and only people with a Merchant Interface login can look at any of it. Whoever owns the customer relationship is working in HubSpot, where none of it shows.

Renewals are where that hurts first. Automated Recurring Billing suspends a subscription when its first payment is declined, and terminates it if nobody fixes the problem before the next run date, after which it cannot be reactivated. Authorize.net can email the merchant when that happens, and an email to an accounts inbox is not a task on anybody’s list. An account manager who could have called about an expired card hears about it after the customer has gone. The same blindness runs the other way, with sellers chasing invoices that a customer paid by card days ago.

One rule shapes every design on this page: card data never goes into HubSpot. HubSpot’s own Product and Services Catalog excludes full card numbers and card security codes even from its Enterprise Sensitive Data feature, and it lists even the last four digits as Sensitive Data. Authorize.net makes the rule easy to keep, because its customer profiles hold the card on its own servers and its responses return the number masked. So the integration moves references and outcomes: profile ids, transaction ids, amounts, dates and statuses, with the card brand as the only card detail.

What syncs

Five rows cover it, and every one flows into HubSpot only. Customer profiles become contacts, or companies where the payment profile is marked business, and each payment profile adds its card brand and nothing else: the masked number and the expiry stay behind, and we never ask for the expiry unmasked. Each charge, refund, void and decline becomes a HubSpot payment, each Automated Recurring Billing subscription a record with its status, amount, interval and next billing date, and each decline or suspension a task for the record’s owner.

Each row matches on its Authorize.net id, which a custom HubSpot property holds. An email address is never the key, because Authorize.net refuses a duplicate profile only when the merchant customer id, description and email all match, so two profiles can share one inbox. To tie a payment to a deal, the checkout puts the HubSpot deal id in the invoice number, which Authorize.net stores and returns in its reports. User fields look tempting, but Authorize.net echoes them back without storing them.

Payments go to HubSpot’s payments object, whose API takes payments made outside HubSpot on every tier from free up and cannot process one. Its documented statuses have no value for a void or a held charge, so Authorize.net’s own status rides in a custom property. Only subscriptions want a custom object, which needs Enterprise; below it, their status and next billing date become deal properties.

Objects that sync between Authorize.net and HubSpot
Source object HubSpot object Direction Match key Notes
Customer profile Contact Into HubSpot Authorize.net customer profile id in a custom HubSpot property A profile whose payment profile is marked business attaches to the company instead.
Customer payment profile Contact Into HubSpot Payment profile id, under its customer profile id Card brand only, since the masked number and the expiry stay at Authorize.net.
Transaction Payment Into HubSpot Transaction id in a custom payment property, with the invoice number carrying the deal id Charges, refunds, voids and declines alike, with amount, date and Authorize.net's own status beside HubSpot's.
Automated Recurring Billing subscription Custom object Into HubSpot Subscription id A custom object needs Enterprise, so smaller portals carry the status and next billing date on the deal.
Declined charge or suspended subscription Engagement Into HubSpot Transaction id or subscription id, one task per failure The task goes to the owner of the contact or deal, so a failed renewal reaches a person.

Architecture

Events arrive first and a nightly pass settles the account. An endpoint recomputes the HMAC-SHA512 hash of each notification body with the Signature Key, compares it with the X-ANET-Signature header, answers 200 and queues the event.

A notification carries ids and a few fields, so the consumer reads the full record. Authorize.net says its API is not based on REST: each call posts a JSON or XML body naming the operation to a single endpoint, and JSON is translated into XML, so elements go in the reference’s order. The consumer keeps allowlisted fields only, never free text or the masked card number, upserts on the Authorize.net id, then links each record to its contact and deal.

Each night a sweep reads the previous day’s settled batches and their transactions, up to 1,000 a page, and repairs what the stream missed. Customer profiles and subscriptions have no changed-since filter, so it compares them by id and status. A watermark per settlement date makes a replay rewrite the same records. Authorize.net publishes no request rate limit, so the sweep paces itself and backs off on errors.

The service never handles a full card number: Accept Hosted or Accept.js sends it from the browser straight to Authorize.net, at SAQ A, or SAQ A-EP for Accept.js on your own form.

Checkout sends card data from the browser straight to Authorize.net, whose signed notifications reach a service that checks each one, reads the full record and upserts it into HubSpot on Authorize.net ids. A nightly pass over settled batches repairs what the notifications missed, and no card number reaches the portal.

What the API allows

API style
JSON or XML over HTTPS
Authentication
API key
Webhooks
Yes
Changed-since filter
Partial
Sandbox
Yes
Rate limit
Not documented

Developer documentation developer.authorize.net

Three ways to connect

The choice here turns on what the business wants to see. Receipts copied into HubSpot are a small job. The state of each customer’s billing, with subscriptions, declines and a reconciliation that proves nothing went missing, needs a service that remembers what it has already written.

A custom API integration does both. An iPaaS is a fair smaller step where one already runs: Celigo documents a prebuilt Authorize.net connector that signs in with the API Login ID and Transaction Key, while Zapier lists Authorize.net as not yet supported. HubSpot’s own payments tool is the route people ask about most, and it runs on Stripe infrastructure, so choosing it means changing processor rather than connecting the one you have, with the stored profiles and recurring schedules that live in it.

  • iPaaS

    Possible

    Celigo documents a prebuilt Authorize.net connector that signs in with the API Login ID and Transaction Key, which suits a team already running Celigo that wants settled payments copied on a schedule. Zapier lists Authorize.net as not yet supported.

  • Marketplace app

    Avoid

    Nothing in the HubSpot App Marketplace carries Authorize.net's name, and HubSpot's own payments tool runs on Stripe, so adopting it means changing processor rather than connecting this one.

What breaks and how we prevent it

A card number in a description

A description on a profile or an order is typed by a person, and nothing in the API stops a card number landing there. We copy no free text by default, and a check on every write drops anything shaped like a card number and logs the record id.

Webhooks switched to inactive

After ten failed retries over about nine days, Authorize.net marks the webhook inactive and stops sending, and it warns that holding the 200 back for processing invites exactly that. We answer before any processing, check the webhook’s status daily through the Webhooks API, and let the nightly sweep fill the gap.

Keys rotated for another cart

The API Login ID and its keys can serve every website and cart on the account, so a new Signature Key or Transaction Key made for another integration retires ours within 24 hours, or at once. We treat a run of signature failures as a likely key change: hold the events, alert, and re-verify them under the new key.

Active subscriptions that stopped paying

Authorize.net defines active as scheduled to be charged, which does not necessarily mean payments succeed, and its own reference shows an active subscription whose latest charge says the card has expired. We judge subscriptions by their latest transactions and the failed subscription event, and task the owner on every failed renewal.

Settlement dates read as local time

The settled batch call reads dates in the merchant’s time zone, or Mountain Time where none is set, unless the time ends in Z. A watermark copied from a batch’s UTC settlement time and sent back without the Z skips the batches in between. Ranges also stop at 31 days and at January 1 of the year before last, so a backfill runs in monthly slices and says where history ends.

Our approach

  1. Scope. We trace where cards are captured today, which other websites and carts share the account’s keys, and which failures each owner wants to hear about.
  2. Architect. We fix the field allowlist, the Authorize.net ids as keys, the invoice number convention that carries the deal id, and whether subscriptions get a custom object or deal properties.
  3. Build. Signature-checked ingest, the queue, the consumer and the nightly batch sweep, written against Authorize.net’s sandbox and a HubSpot test portal; an allowlist of portal ids refuses anything unlisted.
  4. Validate. The sandbox runs in Live Mode, because test mode stores nothing and returns a transaction id of zero. We push approvals, declines and held charges through it, compare counts per settled batch, and scan every written property for card-shaped values.
  5. Operate. We watch webhook status, signature failures and what the sweep repairs, and rotate keys by a runbook agreed with the account’s owner.

Common questions

Is there an Authorize.net app for HubSpot?

No. The HubSpot App Marketplace turns up fuzzy matches for Authorize.net and nothing named for it, though some form and payment apps mention it in their descriptions. Authorize.net's own site search and partner directory list no HubSpot integration either, so connecting the two starts with a build rather than an install, and with deciding which records HubSpot actually needs.

Can Authorize.net card numbers be stored in HubSpot?

No. HubSpot's Product and Services Catalog excludes full card numbers and card security codes even from its Enterprise Sensitive Data feature, and it lists the last four digits as a Sensitive Data type, so this sync leaves those out too. Authorize.net returns the number masked, and the expiry too unless a request asks otherwise. The card brand is the only card detail that crosses, beside ids, amounts, dates and statuses.

Does HubSpot payments work with Authorize.net?

No. HubSpot's knowledge base says HubSpot payments uses Stripe infrastructure to process payments, and the other processing option it describes is connecting a Stripe account. Neither routes a charge through Authorize.net. A business that stays on Authorize.net keeps its customer profiles and recurring schedules there and syncs the results into HubSpot, rather than changing processor to use HubSpot's checkout.

How soon does an Authorize.net payment appear in HubSpot?

The charge lands when its webhook does, with the status Authorize.net reported at that moment. The settled status follows within a day: Authorize.net groups transactions into a batch every 24 hours and settles after the account's cut-off time, 4 pm Pacific unless changed. Recurring charges run at about 2 a.m. Pacific on their scheduled date, so a renewal shows up early that morning.

What happens when an Authorize.net webhook is missed or arrives twice?

A duplicate is harmless: the second copy updates the record the first one wrote, since each record is matched on its Authorize.net id. A failed delivery is retried three times at three-minute intervals, three more at eight hours and four at 48 hours. Anything still missing is recovered by the nightly pass over settled batches and by the notification history, which lists failed deliveries and returns each one with its payload.

How is an Authorize.net webhook signature checked?

Authorize.net hashes each notification body with HMAC-SHA512, keyed on the account's Signature Key, and sends the result in the X-ANET-Signature header. The receiver repeats the hash and rejects a mismatch. The Merchant Interface shows the key as 128 hexadecimal characters that have to be converted to binary before hashing, and no notification is sent until a Signature Key exists.

Can HubSpot show when an Authorize.net subscription renews next?

Yes, as a computed date. Authorize.net returns each subscription's start date, its interval in days or months and its total and past occurrences, with no next billing date among the fields, so the sync works it out. It follows Authorize.net's own rule that a monthly subscription starting on the 31st bills on the last day of every shorter month.

What does an Authorize.net and HubSpot integration take in hours?

Plan on 10 to 20 hours of discovery and 70 to 150 hours of build covering customer profiles, payments, subscriptions and the decline tasks, with signature checks, the nightly batch sweep and a cutover rehearsed in the sandbox first. Most discovery hours go to two questions: where cards are captured today, and which other websites and carts share the account's keys.

Partnerships and accreditations

  • HubSpot Elite Solutions Partner
  • HubSpot Custom Integration Accreditation
  • HubSpot CRM Data Migration Accreditation
  • HubSpot Solutions Architecture Design Accreditation

HubSpot accreditations

  • HubSpot Onboarding Accreditation
  • HubSpot Academy Accreditations

Industry specializations

  • HubSpot Healthcare Industry Specialist
  • HubSpot Financial Services Industry Specialist
  • HubSpot Manufacturing Industry Specialist
  • HubSpot Quote to Cash Capability

Partnerships

  • Anthropic Solutions Partner

Trust and compliance

We design integrations to support the security and privacy rules your business works under, and we build them on independently audited platforms.

How we build

  • Sandbox first. We build and test in a sandbox before anything reaches production.
  • Fail-closed allowlists. An integration runs only against the HubSpot accounts it is approved for.
  • Least-privilege access. Each integration gets only the API scopes it needs.
  • Secrets in a vault. Keys and tokens live in a secrets vault, never in plain text.
  • Sensitive data scoped early. Discovery covers sensitive data, access controls and any BAA or data-processing needs.
  • A compliance package for regulated industries: audit logging, field-level encryption and sensitive-data handling.

Scope a Authorize.net integration

Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.

  • Authorize.net

Type any system and its version, such as Sage 300 or Sage 50. Press Enter or a comma after each one.

Add more detail (optional)

Optional. A sentence or two about the workflow is enough.

We use these answers to scope the work and for nothing else. Privacy policy.

Prefer to talk it through first? Book a technical scoping call

Talk to the people who build these

  • Nijat
  • Sean
  • Prash

Book a scoping call