{
  "name": "Client onboarding software pricing benchmarks 2026",
  "description": "Published subscription prices of 17 client onboarding, client portal and practice-management tools, read from each vendor's own pricing page with a dated full-page screenshot per capture. Portico's own plans are listed for reference and excluded from the statistics.",
  "publisher": "Portico",
  "creator": "Vlad Kuzin",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "pageUrl": "https://www.portico.run/blog/post/client-onboarding-software-pricing-benchmarks",
  "datePublished": "2026-10-30",
  "dateModified": "2026-10-30",
  "method": "Headless Chrome (US locale, New York time zone, 1440 px viewport) opens each vendor's pricing page, saves a full-page screenshot and the visible text, and reads every price from what the page showed in its default state. Prices are USD per month unless a row says otherwise. 'monthly' is the price when billed month to month; 'annual' is the per-month price when billed annually; 'annualTotal' is a price the page states per year. null means the page did not show that term in the captured state, never that the term does not exist.",
  "fields": {
    "monthly": "USD per month, billed monthly (null = not shown in the capture)",
    "annual": "USD per month, billed annually (null = not shown in the capture)",
    "annualTotal": "USD per year as stated by the vendor (null = not stated)",
    "unit": "what one price buys: per account, per user, per onboarding, per year",
    "seatModel": "per-seat | flat (one account price, users included or unlimited) | tiered (price set by clients, requests or applications, users included) | usage (per onboarding or per loan)",
    "freePlan": "plan ($0 plan on the pricing page) | first-use (first onboarding free, then paid) | none-shown",
    "check": "amounts that diff.mjs must find near the plan name in every new capture; empty = the price is only readable in the screenshot"
  },
  "vendors": [
    {
      "id": "honeybook",
      "guide": "/blog/post/honeybook-pricing",
      "name": "HoneyBook",
      "pricingUrl": "https://www.honeybook.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "honeybook-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "Team members by tier: Essentials up to 2, Premium unlimited",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "$29 /month (billed yearly) Starter",
      "note": "The captured page carried a \"Fall savings! Get special prices on annual plans.\" banner, so the annual prices may be promotional. Monthly prices were not shown in the default state.",
      "plans": [
        {
          "plan": "Starter",
          "monthly": null,
          "annual": 29,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$29"
          ]
        },
        {
          "plan": "Essentials",
          "monthly": null,
          "annual": 49,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$49"
          ]
        },
        {
          "plan": "Premium",
          "monthly": null,
          "annual": 109,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$109"
          ]
        }
      ]
    },
    {
      "id": "dubsado",
      "guide": "/blog/post/dubsado-pricing",
      "name": "Dubsado",
      "pricingUrl": "https://www.dubsado.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "dubsado-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "3 additional users free; 4 to 10 users $25/mo extra",
      "freePlan": "none-shown",
      "defaultTerm": "monthly",
      "evidence": "Starter Plan $335/yr Premier Plan $525/yr",
      "note": "The page says \"Start for free\" but lists no $0 plan.",
      "plans": [
        {
          "plan": "Starter",
          "monthly": 35,
          "annual": 27.92,
          "annualTotal": 335,
          "unit": "per account",
          "check": [
            "$35",
            "$335"
          ]
        },
        {
          "plan": "Premier",
          "monthly": 55,
          "annual": 43.75,
          "annualTotal": 525,
          "unit": "per account",
          "check": [
            "$55",
            "$525"
          ]
        }
      ]
    },
    {
      "id": "clustdoc",
      "guide": "/blog/post/clustdoc-pricing",
      "name": "Clustdoc",
      "pricingUrl": "https://clustdoc.com/pricing/",
      "captured": "2026-10-26",
      "screenshot": "clustdoc-2026-10-26",
      "status": "ok",
      "currency": "EUR",
      "seatModel": "tiered",
      "seatNote": "PRO: 3 user seats and 50 new applications per month",
      "freePlan": "none-shown",
      "defaultTerm": "unclear",
      "evidence": "PRO ✪ Relieve emails & update fatigue €190/month 3 user seats 50 new applications/month",
      "note": "The page defaulted to euros and does not state the billing term. The dollar view was not captured, so Clustdoc is outside the US-dollar statistics. EXPERT and ULTIMATE are \"On quote\".",
      "plans": [
        {
          "plan": "PRO",
          "monthly": 190,
          "annual": null,
          "annualTotal": null,
          "unit": "per account, EUR, term not stated",
          "check": [
            "€190"
          ],
          "termUnclear": true
        },
        {
          "plan": "EXPERT",
          "quote": true,
          "unit": "5 user seats or more",
          "check": []
        },
        {
          "plan": "ULTIMATE",
          "quote": true,
          "unit": "10 user seats or more",
          "check": []
        }
      ]
    },
    {
      "id": "content-snare",
      "guide": "/blog/post/content-snare-pricing",
      "name": "Content Snare",
      "pricingUrl": "https://contentsnare.com/pricing/",
      "captured": "2026-10-26",
      "screenshot": "content-snare-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "tiered",
      "seatNote": "Users and active requests set the tier: 2, 5, 10, 20 or more users",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "Basic For solo practitioners and small teams $35 USD /month, billed annually",
      "note": "Monthly prices were not shown in the default state.",
      "plans": [
        {
          "plan": "Basic",
          "monthly": null,
          "annual": 35,
          "annualTotal": null,
          "unit": "per account, 2 users",
          "check": [
            "$35"
          ]
        },
        {
          "plan": "Plus",
          "monthly": null,
          "annual": 71,
          "annualTotal": null,
          "unit": "per account, 5 users",
          "check": [
            "$71"
          ]
        },
        {
          "plan": "Pro",
          "monthly": null,
          "annual": 119,
          "annualTotal": null,
          "unit": "per account, 10 users",
          "check": [
            "$119"
          ]
        },
        {
          "plan": "Custom",
          "monthly": null,
          "annual": 215,
          "annualTotal": null,
          "from": true,
          "unit": "per account, 20 or more users",
          "check": [
            "$215"
          ]
        }
      ]
    },
    {
      "id": "suitedash",
      "name": "SuiteDash",
      "pricingUrl": "https://suitedash.com/pricing/",
      "captured": "2026-10-26",
      "screenshot": "suitedash-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "Unlimited clients and staff on every plan",
      "freePlan": "none-shown",
      "defaultTerm": "monthly",
      "evidence": "one price per month/year/century … NOT per user Monthly Yearly Century START $ 19 mo",
      "note": "Yearly and \"Century\" prices were not shown in the default state.",
      "plans": [
        {
          "plan": "Start",
          "near": "START",
          "monthly": 19,
          "annual": null,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$19"
          ]
        },
        {
          "plan": "Thrive",
          "near": "THRIVE",
          "monthly": 49,
          "annual": null,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$49"
          ]
        },
        {
          "plan": "Pinnacle",
          "near": "PINNACLE",
          "monthly": 99,
          "annual": null,
          "annualTotal": null,
          "unit": "per account",
          "check": [
            "$99"
          ]
        }
      ]
    },
    {
      "id": "moxo",
      "name": "Moxo",
      "pricingUrl": "https://www.moxo.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "moxo-2026-10-26",
      "status": "no-public-prices",
      "currency": null,
      "seatModel": null,
      "seatNote": "",
      "freePlan": "none-shown",
      "defaultTerm": "n/a",
      "evidence": "",
      "note": "The pricing URL redirects to the homepage, which shows no prices (checked October 26 and 30, 2026).",
      "plans": []
    },
    {
      "id": "copilot",
      "name": "Assembly",
      "pricingUrl": "https://assembly.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "copilot-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "tiered",
      "seatNote": "Active contacts set the tier; internal users included: 1, 1, 3, 5, unlimited",
      "freePlan": "plan",
      "defaultTerm": "annual",
      "evidence": "Starter is $29/month billed annually vs. $49 billed monthly.",
      "note": "Formerly Copilot. Plan prices render as animated digits, so Professional, Advanced and Enterprise were read from the screenshot. Monthly prices other than Starter's were not shown.",
      "plans": [
        {
          "plan": "Free",
          "monthly": 0,
          "annual": 0,
          "annualTotal": null,
          "unit": "5 active contacts, 1 internal user",
          "check": []
        },
        {
          "plan": "Starter",
          "monthly": 49,
          "annual": 29,
          "annualTotal": null,
          "unit": "per account, 50 active contacts",
          "check": [
            "$29",
            "$49"
          ]
        },
        {
          "plan": "Professional",
          "monthly": null,
          "annual": 99,
          "annualTotal": null,
          "unit": "per account, 500 active contacts",
          "check": []
        },
        {
          "plan": "Advanced",
          "monthly": null,
          "annual": 499,
          "annualTotal": null,
          "unit": "per account, unlimited active contacts",
          "check": []
        },
        {
          "plan": "Enterprise",
          "monthly": null,
          "annual": null,
          "annualTotal": null,
          "startingPrice": 2000,
          "unit": "starting price, term not stated",
          "check": []
        }
      ]
    },
    {
      "id": "taxdome",
      "guide": "/blog/post/taxdome-pricing",
      "name": "TaxDome",
      "pricingUrl": "https://taxdome.com/pricing",
      "captured": "2026-07-16",
      "screenshot": null,
      "status": "manual",
      "currency": "USD",
      "seatModel": "per-seat",
      "seatNote": "Essentials is solo-user only",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "$700 /year, per seat (with a 3-year commitment)",
      "evidenceSource": "claude/strategy-2026/OWED-ARTIFACTS-2026-07-16/CLAIMS-LEDGER-2026-07-16.md",
      "note": "TaxDome's page answered the capture script with HTTP 403 on October 26, 2026, and the index never works around bot walls. Vlad Kuzin captures it by hand. Until then the row shows the last dated reading, July 16, 2026, at the 1-year rate (2-year and 3-year terms cost less). It is excluded from the statistics until a current capture exists.",
      "plans": [
        {
          "plan": "Essentials",
          "monthly": null,
          "annual": null,
          "annualTotal": 800,
          "unit": "per seat per year, 1-year term, billed upfront",
          "check": []
        },
        {
          "plan": "Pro",
          "monthly": null,
          "annual": null,
          "annualTotal": 1000,
          "unit": "per seat per year, 1-year term, billed upfront",
          "check": []
        },
        {
          "plan": "Business",
          "monthly": null,
          "annual": null,
          "annualTotal": 1200,
          "unit": "per seat per year, 1-year term, billed upfront",
          "check": []
        }
      ]
    },
    {
      "id": "canopy",
      "guide": "/blog/post/canopy-pricing",
      "name": "Canopy",
      "pricingUrl": "https://www.getcanopy.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "canopy-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "per-seat",
      "seatNote": "",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "Standard Everything you need to run your firm $74 user/month billed annually",
      "note": "The page offers monthly billing (\"annual billing saves you 20%\") but showed annual prices by default. Enterprise is custom.",
      "plans": [
        {
          "plan": "Standard",
          "monthly": null,
          "annual": 74,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$74"
          ]
        },
        {
          "plan": "Plus",
          "monthly": null,
          "annual": 109,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$109"
          ]
        },
        {
          "plan": "Premium",
          "monthly": null,
          "annual": 149,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$149"
          ]
        }
      ]
    },
    {
      "id": "karbon",
      "guide": "/blog/post/karbon-pricing",
      "name": "Karbon",
      "pricingUrl": "https://karbonhq.com/pricing/",
      "captured": "2026-10-26",
      "screenshot": "karbon-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "per-seat",
      "seatNote": "Per user; monthly billing only for teams of 4 or more",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "Team $59/month, per user, paid annually Or $79/month per user, paid monthly Monthly subscription only available for teams of 4+",
      "note": "Enterprise is custom.",
      "plans": [
        {
          "plan": "Team",
          "monthly": 79,
          "annual": 59,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$59",
            "$79"
          ]
        },
        {
          "plan": "Business",
          "monthly": 99,
          "annual": 89,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$89",
            "$99"
          ]
        }
      ]
    },
    {
      "id": "financial-cents",
      "guide": "/blog/post/financial-cents-pricing",
      "name": "Financial Cents",
      "pricingUrl": "https://financial-cents.com/pricing/",
      "captured": "2026-10-26",
      "screenshot": "financial-cents-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "per-seat",
      "seatNote": "Solo is for single-user firms; Team and Scale are per user",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "Single user firms only | All plans are a 12-month agreement.",
      "note": "\"All plans are a 12-month agreement.\" Monthly prices were not shown in the default state. Enterprise is custom.",
      "plans": [
        {
          "plan": "Solo",
          "monthly": null,
          "annual": 19,
          "annualTotal": null,
          "unit": "per account, single-user firms only",
          "check": [
            "$19"
          ]
        },
        {
          "plan": "Team",
          "monthly": null,
          "annual": 49,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$49"
          ]
        },
        {
          "plan": "Scale",
          "monthly": null,
          "annual": 69,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$69"
          ]
        }
      ]
    },
    {
      "id": "ignition",
      "name": "Ignition",
      "pricingUrl": "https://www.ignitionapp.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "ignition-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "tiered",
      "seatNote": "Active clients and users set the tier: Solo 20 clients and 1 user, Core 50 and 3, Pro 350 and 15, Pro+ 600 and 20",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "*$39/month paid annually, $49/month paid monthly. **Eligibility criteria apply.",
      "note": "Solo is limited to solopreneurs under $150k annual revenue. Core, Pro and Pro+ monthly prices were not shown in the default state.",
      "plans": [
        {
          "plan": "Solo",
          "monthly": 49,
          "annual": 39,
          "annualTotal": null,
          "unit": "per account, 20 active clients",
          "check": [
            "$39",
            "$49"
          ]
        },
        {
          "plan": "Core",
          "monthly": null,
          "annual": 99,
          "annualTotal": null,
          "unit": "per account, 50 active clients",
          "check": [
            "$99"
          ]
        },
        {
          "plan": "Pro",
          "monthly": null,
          "annual": 229,
          "annualTotal": null,
          "unit": "per account, 350 active clients",
          "check": [
            "$229"
          ]
        },
        {
          "plan": "Pro+",
          "monthly": null,
          "annual": 399,
          "annualTotal": null,
          "unit": "per account, 600 active clients",
          "check": [
            "$399"
          ]
        }
      ]
    },
    {
      "id": "bonsai",
      "name": "Bonsai",
      "pricingUrl": "https://www.hellobonsai.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "bonsai-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "per-seat",
      "seatNote": "",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "Basic $15 / month $9 / month (if paid annually)",
      "note": "",
      "plans": [
        {
          "plan": "Basic",
          "monthly": 15,
          "annual": 9,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$9",
            "$15"
          ]
        },
        {
          "plan": "Essentials",
          "monthly": 25,
          "annual": 19,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$19",
            "$25"
          ]
        },
        {
          "plan": "Premium",
          "monthly": 39,
          "annual": 29,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$29",
            "$39"
          ]
        },
        {
          "plan": "Elite",
          "monthly": 59,
          "annual": 49,
          "annualTotal": null,
          "unit": "per user",
          "check": [
            "$49",
            "$59"
          ]
        }
      ]
    },
    {
      "id": "moxie",
      "name": "Moxie",
      "pricingUrl": "https://www.withmoxie.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "moxie-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "Teams: up to five team members",
      "freePlan": "none-shown",
      "defaultTerm": "unclear",
      "evidence": "Starter Perfect for freelancers just starting out",
      "note": "The page has a Yearly and Monthly toggle. The capture does not show which one was active, so the prices are shown without a billing term.",
      "plans": [
        {
          "plan": "Starter",
          "monthly": 12,
          "annual": null,
          "annualTotal": null,
          "unit": "per account, term not stated",
          "check": [
            "$12"
          ],
          "termUnclear": true
        },
        {
          "plan": "Pro",
          "monthly": 25,
          "annual": null,
          "annualTotal": null,
          "unit": "per account, term not stated",
          "check": [
            "$25"
          ],
          "termUnclear": true
        },
        {
          "plan": "Teams",
          "monthly": 40,
          "annual": null,
          "annualTotal": null,
          "unit": "per account, up to 5 members, term not stated",
          "check": [
            "$40"
          ],
          "termUnclear": true
        }
      ]
    },
    {
      "id": "fileinvite",
      "name": "FileInvite",
      "pricingUrl": "https://www.fileinvite.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "fileinvite-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "tiered",
      "seatNote": "Priced by loan volume (up to 100 commercial loans a year)",
      "freePlan": "none-shown",
      "defaultTerm": "annual",
      "evidence": "starting from USD$9,900 /year For lenders processing up to 100 typical commercial loans annually",
      "note": "The public pricing page now addresses commercial lenders only.",
      "plans": [
        {
          "plan": "Standard",
          "near": "STANDARD PLANS",
          "monthly": null,
          "annual": 825,
          "annualTotal": 9900,
          "from": true,
          "unit": "per year, up to 100 loans",
          "check": [
            "$9900"
          ]
        }
      ]
    },
    {
      "id": "onboardmap",
      "name": "OnboardMap",
      "pricingUrl": "https://onboardmap.com/",
      "captured": "2026-10-30",
      "screenshot": "onboardmap-2026-10-30",
      "status": "ok",
      "currency": "USD",
      "seatModel": "usage",
      "seatNote": "Unlimited team seats; pay per client onboarding sent",
      "freePlan": "first-use",
      "defaultTerm": "n/a",
      "evidence": "Your first client onboarding is free, then $12 per onboarding. No subscription, no monthly fee, no monthly limits.",
      "note": "Its /pricing URL returns 404, so prices were read from the homepage pricing section. No subscription, so OnboardMap is outside the monthly-price statistics.",
      "plans": [
        {
          "plan": "Pay as you go",
          "near": "Pay As You Go",
          "monthly": null,
          "annual": null,
          "annualTotal": null,
          "perUse": 12,
          "unit": "per client onboarding, first one free",
          "check": [
            "$12"
          ]
        }
      ]
    },
    {
      "id": "17hats",
      "name": "17hats",
      "pricingUrl": "https://www.17hats.com/pricing",
      "captured": "2026-10-26",
      "screenshot": "17hats-2026-10-26",
      "status": "ok",
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "One all-inclusive plan; user limits not stated on the page",
      "freePlan": "none-shown",
      "defaultTerm": "monthly",
      "evidence": "Monthly $60 /month 7-DAY FREE TRIAL Save $120 Yearly $600 /year",
      "note": "Also sold as $800 for two years.",
      "plans": [
        {
          "plan": "All features",
          "near": "Monthly",
          "monthly": 60,
          "annual": 50,
          "annualTotal": 600,
          "unit": "per account",
          "check": [
            "$60",
            "$600",
            "$800"
          ]
        }
      ]
    },
    {
      "id": "portico",
      "name": "Portico",
      "pricingUrl": "https://www.portico.run/pricing",
      "captured": "2026-10-26",
      "screenshot": "portico-2026-10-26",
      "status": "ok",
      "own": true,
      "currency": "USD",
      "seatModel": "flat",
      "seatNote": "Unlimited team members on every plan; tiers set by onboardings per month (3, 25, 100, unlimited)",
      "freePlan": "plan",
      "defaultTerm": "annual",
      "evidence": "The Starter plan costs $39 per month, or $29 per month billed annually.",
      "note": "Our own product, listed for reference and left out of every statistic.",
      "plans": [
        {
          "plan": "Free",
          "monthly": 0,
          "annual": 0,
          "annualTotal": null,
          "unit": "3 onboardings per month",
          "check": [
            "$0"
          ]
        },
        {
          "plan": "Starter",
          "monthly": 39,
          "annual": 29,
          "annualTotal": null,
          "unit": "per account, 25 onboardings per month",
          "check": [
            "$29",
            "$39"
          ]
        },
        {
          "plan": "Pro",
          "monthly": 79,
          "annual": 59,
          "annualTotal": null,
          "unit": "per account, 100 onboardings per month",
          "check": [
            "$59",
            "$79"
          ]
        },
        {
          "plan": "Business",
          "monthly": 149,
          "annual": 119,
          "annualTotal": null,
          "unit": "per account, unlimited onboardings",
          "check": [
            "$119",
            "$149"
          ]
        }
      ]
    }
  ],
  "changeLog": [
    {
      "date": "2026-10-30",
      "entry": "First edition. 15 competitors captured on October 26, 2026, and OnboardMap on October 30, 2026, because its /pricing URL returns 404. TaxDome is a manual capture showing its last dated price (July 16, 2026), because its page blocks automated visits. Moxo no longer publishes prices."
    }
  ],
  "history": [
    {
      "date": "2025-02-04",
      "vendor": "HoneyBook",
      "entry": "HoneyBook raised monthly prices: Starter $19 to $36, Essentials $39 to $59, Premium $79 to $125.",
      "quote": "Starter Plan: From $19 to $36/month (89.47% increase) Essentials Plan: From $39 to $59/month (51.28% increase) Premium Plan: From $79 to $125/month (63.2% increase)",
      "source": "https://fstoppers.com/business/honeybooks-price-hike-coming-heres-what-need-know-and-how-save-690584",
      "sourcePublished": "2025-01-24",
      "accessed": "2026-10-30"
    }
  ]
}
