{"id":936725,"date":"2026-02-12T19:01:36","date_gmt":"2026-02-13T00:01:36","guid":{"rendered":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/"},"modified":"2026-02-12T19:01:36","modified_gmt":"2026-02-13T00:01:36","slug":"sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results","status":"publish","type":"post","link":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/","title":{"rendered":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results"},"content":{"rendered":"<div class=\"mw_release\">\n<p align=\"center\">\n        <em>Company delivers 100th consecutive quarter of topline growth<\/em>\n      <\/p>\n<p align=\"center\">\n        <em>Fourth quarter 2025 re<\/em><br \/>\n        <em>venue grew 13%<\/em><br \/>\n        <em> and recurring revenue grew <\/em><br \/>\n        <em>14%<\/em><br \/>\n        <em> from the fourth quarter of 2024<\/em>\n      <\/p>\n<p align=\"center\">\n        <em>Announces planned retirement of Chief Financial Officer and appointment of new Chief Financial Officer<\/em>\n      <\/p>\n<p align=\"center\">\n        <em>Announces increase to Share Repurchase Program\u00a0<\/em>\n      <\/p>\n<p>MINNEAPOLIS, Feb.  12, 2026  (GLOBE NEWSWIRE) &#8212; SPS Commerce, Inc. (NASDAQ: SPSC), the leading intelligent supply chain network, today announced financial results for the fourth quarter and year ended December 31, 2025.<\/p>\n<p>\n        <strong><br \/>\n          <u>Financial Highlights<\/u><br \/>\n        <\/strong>\n      <\/p>\n<p>\n        <strong>Fourth Quarter 2025 Financial Highlights<\/strong>\n      <\/p>\n<ul type=\"disc\">\n<li>Revenue was $192.7 million in the fourth quarter of 2025, compared to $170.9 million in the fourth quarter of 2024, reflecting 13% growth.<\/li>\n<li>Recurring revenue grew 14% from the fourth quarter of 2024.<\/li>\n<li>Net income was $25.8 million or $0.68 per diluted share, compared to net income of $17.6 million or $0.46 per diluted share in the fourth quarter of 2024.<\/li>\n<li>Non-GAAP income per diluted share was $1.14, compared to non-GAAP income per diluted share of $0.89 in the fourth quarter of 2024.<\/li>\n<li>Adjusted EBITDA for the fourth quarter of 2025 increased 22% to $60.5 million compared to the fourth quarter of 2024.<\/li>\n<li style=\"margin-bottom:0.1pt\">Share repurchases in the fourth quarter of 2025 totaled $25.0 million.<\/li>\n<\/ul>\n<p>\n        <strong>Fiscal Year 2025 Financial Highlights<\/strong>\n      <\/p>\n<ul type=\"disc\">\n<li>Revenue was $751.5 million for the year ended December\u00a031, 2025, compared to $637.8 million for the year ended December\u00a031, 2024, reflecting 18% growth.<\/li>\n<li>Recurring revenue grew 20% from the year ended December\u00a031, 2024.<\/li>\n<li>Net income was $93.3 million or $2.46 per diluted share for the year ended December\u00a031, 2025, compared to net income of $77.1 million or $2.04 per diluted share for the comparable period in 2024, reflecting 21% growth in year-over-year net income.<\/li>\n<li>Non-GAAP income per diluted share was $4.27, compared to non-GAAP income per diluted share of $3.48 in the year ended December\u00a031, 2024.<\/li>\n<li>Adjusted EBITDA for the year ended December\u00a031, 2025, increased 24% to $231.4 million compared to the year ended December\u00a031, 2024.<\/li>\n<li style=\"margin-bottom:0.1pt\">Share repurchases for the year ended December 31, 2025 totaled $115.0 million.<\/li>\n<\/ul>\n<p>\u201cSPS Commerce\u2019s sustained and profitable growth and ongoing network expansion demonstrate our success in delivering the products and services that retailers and suppliers depend on to strengthen collaboration and drive continuous improvement,\u201d said Chad Collins, CEO of SPS Commerce. \u201cWe\u2019re excited about our recently launched agentic capabilities that leverage decades of expertise and proprietary network intelligence and competitively position SPS to deliver more meaningful and scalable AI enhancements across our product portfolio to better address the trends that are shaping the future of supply chain collaboration.\u201d<\/p>\n<p>\u201cThe fourth quarter of 2025 marks SPS Commerce\u2019s 100th consecutive quarter of revenue growth \u2013 a milestone that speaks to the durability of our business model and our disciplined financial strategy. As we look ahead, we remain focused on driving balanced, profitable growth and delivering long-term value for our customers and shareholders,\u201d said Kim Nelson, CFO of SPS Commerce.<\/p>\n<p>\n        <strong><br \/>\n          <u>Executive Appointment<\/u><br \/>\n        <\/strong><br \/>\n        <br \/>SPS Commerce also announced it has appointed Joseph Del Preto as its Executive Vice President and Chief Financial Officer, effective March 16, 2026. Del Preto brings more than 20 years of experience leading finance, accounting, and operational strategy for high-growth, publicly traded technology companies, most recently serving as Chief Financial Officer and Treasurer of Sprout Social, Inc., a publicly traded social media management and analytics platform. Before Sprout Social, Del Preto held senior finance leadership roles at Groupon and Echo Global Logistics and began his career in public accounting at PricewaterhouseCoopers. Kim Nelson, who announced her intent to retire as Executive Vice President &amp; Chief Financial Officer, will remain at SPS Commerce through the conclusion of a customary transition period.<\/p>\n<p>\u201cFor nearly two decades, Kim has been a steady, trusted leader through some of the most defining chapters of our company\u2019s journey, from the IPO to our evolution into a global organization that just achieved 100 consecutive quarters of growth. On behalf of the entire SPS team, I want to thank Kim for her extraordinary contributions and congratulate her on a well-earned retirement,\u201d said Chad Collins, CEO of SPS Commerce. \u201cAs we look ahead, I\u2019m excited to welcome Joseph Del Preto as our new Chief Financial Officer. He brings deep experience leading finance organizations at scale, a strong understanding of public-company dynamics, and a leadership style that aligns closely with our values. I\u2019m confident Joe will build on the strong foundation Kim created and help guide SPS through our next chapter of growth.\u201d<\/p>\n<p>\n        <strong><br \/>\n          <u>Share Repurchase Program <\/u><br \/>\n        <\/strong><br \/>\n        <br \/>The Company also announced today that the Board of Directors of SPS Commerce approved an additional $200.0 million in repurchase authority under the Company\u2019s previously announced share repurchase program that was approved on October 29, 2025 for the repurchase of up to $100.0 million of common stock, for a total authorized repurchase amount of $300.0 million under the program. Purchases may be made from time to time in the open market or in privately negotiated purchases, or both. The share repurchase program became effective on December 1, 2025 and expires on December 1, 2027.<\/p>\n<p>\n        <strong><br \/>\n          <u>Guidance<\/u><br \/>\n        <\/strong><br \/>\n        <br \/>\n        <strong>First Quarter 2026 Guidance<\/strong>\n      <\/p>\n<ul type=\"disc\">\n<li>Revenue is expected to be in the range of $191.6 million to $193.6 million, representing 6% to 7% year-over-year growth.<\/li>\n<li>Net income per diluted share is expected to be in the range of $0.46 to $0.49, with fully diluted weighted average shares outstanding of 38.2 million shares.<\/li>\n<li>Non-GAAP income per diluted share is expected to be in the range of $0.95 to $0.99.<\/li>\n<li>Adjusted EBITDA is expected to be in the range of $55.5 million to $57.5 million.<\/li>\n<li>Non-cash, share-based compensation expense is expected to be $17.2 million, depreciation expense is expected to be $4.5 million, and amortization expense is expected to be $9.6 million.<\/li>\n<\/ul>\n<p>\n        <strong>Fiscal Year 2026<\/strong><br \/>\n        <strong>Guidance<\/strong>\n      <\/p>\n<ul type=\"disc\">\n<li>Revenue is expected to be in the range of $798.5 million to $806.9 million, representing 6% to 7% growth over 2025.<\/li>\n<li>Net income per diluted share is expected to be in the range of $2.50 to $2.58, with fully diluted weighted average shares outstanding of 38.4 million shares.<\/li>\n<li>Non-GAAP income per diluted share is expected to be in the range of $4.42 to $4.50.<\/li>\n<li>Adjusted EBITDA is expected to be in the range of $261.0 million to $265.5 million, representing 13% to 15% growth over 2025.<\/li>\n<li>Non-cash, share-based compensation expense is expected to be $67.1 million, depreciation expense is expected to be $21.6 million, and amortization expense is expected to be $38.3 million.<\/li>\n<\/ul>\n<p>The forward-looking measures and the underlying assumptions involve significant known and unknown risks and uncertainties, and actual results may vary materially. The Company does not present a reconciliation of the forward-looking non-GAAP financial measures, including Adjusted EBITDA, Adjusted EBITDA margin, and non-GAAP income per share, to the most directly comparable GAAP financial measures because it is impractical to forecast certain items without unreasonable efforts due to the uncertainty and inherent difficulty of predicting, within a reasonable range, the occurrence and financial impact of and the periods in which such items may be recognized.<\/p>\n<p>\n        <strong><br \/>\n          <u>Quarterly Conference Call<\/u><br \/>\n        <\/strong>\n      <\/p>\n<p>To access the call, please dial 1-833-816-1382, or outside the U.S. 1-412-317-0475 at least 15 minutes prior to the 3:30 p.m. CT start time. Please ask to join the SPS Commerce Q4 2025 conference call. A live webcast of the call will also be available at <a href=\"https:\/\/www.globenewswire.com\/Tracker?data=7nHrikg4O4qwhhutptE-MX9uK25RvbKjy-l03VSI6rzGqnrPzRSKMV81Y3Tgb8Ple20qj9vZKJm3VAgTwAzD6G8AXQ2M4lFItrjVsZlthJ-yaQYB83RpHV6z2w4s7JVY\" rel=\"nofollow\" target=\"_blank\">http:\/\/investors.spscommerce.com<\/a> under the Events and Presentations menu. The replay will also be available on our website at <a href=\"https:\/\/www.globenewswire.com\/Tracker?data=7nHrikg4O4qwhhutptE-MX9uK25RvbKjy-l03VSI6ryz6ySd7G3nYiMvPmDOKAvSptIaMNXy7AYBJaptbJe4_QnV6VXnRA2DqLXFxm2HWiw0rSmwZxShOrq7dhb59zLA\" rel=\"nofollow\" target=\"_blank\">http:\/\/investors.spscommerce.com<\/a>.<\/p>\n<p>\n        <strong><br \/>\n          <u>About SPS Commerce<\/u><br \/>\n        <\/strong><br \/>\n        <br \/>SPS Commerce is the world\u2019s leading retail network, connecting trading partners around the globe to optimize supply chain operations for all retail partners. We support data-driven partnerships with innovative cloud technology, customer-obsessed service, and accessible experts so our customers can focus on what they do best. Over 50,000 recurring revenue customers in retail, grocery, distribution, supply, manufacturing, and logistics are using SPS as their retail network. SPS has achieved 100 consecutive quarters of revenue growth and is headquartered in Minneapolis. For additional information, contact SPS at 866-245-8100 or visit www.spscommerce.com.<\/p>\n<p>SPS COMMERCE, SPS, SPS logo and INFINITE RETAIL POWER are marks of SPS Commerce, Inc. and registered in the U.S. Patent and Trademark Office, along with other SPS marks. Such marks may also be registered or otherwise protected in other countries.\u00a0<\/p>\n<p>SPS-F<\/p>\n<p>\n        <strong><br \/>\n          <u>Use of Non-GAAP Financial Measures<\/u><br \/>\n        <\/strong>\n      <\/p>\n<p>To supplement our condensed consolidated financial statements, we provide investors with Adjusted EBITDA, Adjusted EBITDA Margin, and non-GAAP income per share, all of which are non-GAAP financial measures. We believe that these non-GAAP financial measures provide useful information to our management, Board of Directors, and investors regarding certain financial and business trends relating to our financial condition and results of operations.<\/p>\n<p>Our management uses these non-GAAP financial measures to compare our performance to that of prior periods for trend analyses and planning purposes. Adjusted EBITDA is also used for purposes of determining executive and senior management incentive compensation. We believe these non-GAAP financial measures are useful to an investor as they are widely used in evaluating operating performance. Adjusted EBITDA and Adjusted EBITDA Margin are used to measure operating performance without regard to items such as depreciation and amortization, which can vary depending upon accounting methods and the book value of assets, and to present a meaningful measure of corporate performance exclusive of capital structure and the method by which assets were acquired.<\/p>\n<p>These non-GAAP financial measures should not be considered a substitute for, or superior to, financial measures calculated in accordance with GAAP. These non-GAAP financial measures exclude significant expenses and income that are required by GAAP to be recorded in our condensed consolidated financial statements and are subject to inherent limitations. Investors should review the reconciliations of non-GAAP financial measures to the comparable GAAP financial measures that are included in this press release.<\/p>\n<p>\n        <strong>Adjusted EBITDA Measures:<\/strong>\n      <\/p>\n<p>\n        <u>Adjusted EBITDA<\/u> consists of net income adjusted for income tax expense, depreciation and amortization expense, stock-based compensation expense, realized gain or loss from investments held and foreign currency impact on cash and investments, investment income, and other adjustments as necessary for a fair presentation. Other adjustments for the year ended December\u00a031, 2025 included the expense impacts from disposals of certain capitalized internally developed software, disposals of other equipment, remeasurement of acquired earn-out payments, and one-time acquisition-related insurance costs. Other adjustments for the year ended December\u00a031, 2024 included the expense impacts from disposals of certain capitalized internally developed software and one-time acquisition-related insurance costs. Net income is the most directly comparable GAAP measure of financial performance.<\/p>\n<p>\n        <u>Adjusted EBITDA Margin<\/u> consists of Adjusted EBITDA divided by revenue. Margin, the comparable GAAP measure of financial performance, consists of net income divided by revenue.<\/p>\n<p>\n        <strong>Non-GAAP Income Per Share Measure:<\/strong>\n      <\/p>\n<p>\n        <u>Non-GAAP income per share<\/u> consists of net income adjusted for stock-based compensation expense, amortization expense related to intangible assets, realized gain or loss from investments held and foreign currency impact on cash and investments, other adjustments as necessary for a fair presentation, including for the year ended December\u00a031, 2025 the expense impacts from disposals of certain capitalized internally developed software, disposals of other equipment, remeasurement of acquired earn-out payments, and one-time acquisition-related insurance costs and for the year ended December\u00a031, 2024 the expense impacts from disposals of certain capitalized internally developed software and one-time acquisition-related insurance costs, and the corresponding tax impacts of the adjustments to net income, divided by the weighted average number of shares of common and diluted stock outstanding during each period. Net income per share, the most directly comparable GAAP measure of financial performance, consists of net income divided by the weighted average number of shares of common and diluted stock outstanding during each period. To quantify the tax effects, we recalculated income tax expense excluding the direct book and tax effects of the specific items constituting the non-GAAP adjustments. The difference between this recalculated income tax expense and GAAP income tax expense is presented as the income tax effect of the non-GAAP adjustments.<\/p>\n<p>\n        <strong><br \/>\n          <u>Forward-Looking Statements<\/u><br \/>\n        <\/strong>\n      <\/p>\n<p>This press release may contain forward-looking statements, including information about management&#8217;s view of SPS Commerce&#8217;s future expectations, plans and prospects, including our views regarding future execution within our business, the opportunity we see in the retail supply chain world and our performance for the first quarter and full year of 2026, within the safe harbor provisions under The Private Securities Litigation Reform Act of 1995. These statements involve known and unknown risks, uncertainties and other factors which may cause the results of SPS Commerce to be materially different than those expressed or implied in such statements. Certain of these risk factors and others are included in documents SPS Commerce files with the Securities and Exchange Commission, including but not limited to, SPS Commerce&#8217;s Annual Report on Form 10-K for the year ended December\u00a031, 2024, as well as subsequent reports filed with the Securities and Exchange Commission. Other unknown or unpredictable factors also could have material adverse effects on SPS Commerce&#8217;s future results. The forward-looking statements included in this press release are made only as of the date hereof. SPS Commerce cannot guarantee future results, levels of activity, performance or achievements. Accordingly, you should not place undue reliance on these forward-looking statements. Finally, SPS Commerce expressly disclaims any intent or obligation to update or revise any forward-looking statements, whether as a result of new information, future events, or otherwise.<\/p>\n<p align=\"center\">\n        \n      <\/p>\n<table style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"8\" style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>SPS COMMERCE, INC.<\/strong><br \/>\n            <br \/>\n            <strong>CONSOLIDATED BALANCE SHEETS<\/strong><br \/>\n            <br \/>(Unaudited; In thousands, except shares)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>December 31,<\/strong><br \/>\n            <br \/>\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>December 31,<\/strong><br \/>\n            <br \/>\n            <strong>2024<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>ASSETS<\/strong>\n          <\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Current assets<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:75%;width:75%;min-width:75%;vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Cash and cash equivalents<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">151,355<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">241,017<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Accounts receivable<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">75,295<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">56,214<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px;vertical-align: bottom\">Allowance for credit losses<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(7,129<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(4,179<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Accounts receivable, net<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">68,166<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">52,035<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred costs<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">66,693<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">65,342<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Other assets<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">49,090<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">23,513<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Total current assets<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">335,304<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">381,907<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Property and equipment, net<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">43,117<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,547<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Operating lease right-of-use assets<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">5,025<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">8,192<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Goodwill<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">541,719<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">399,180<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Intangible assets, net<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">215,815<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">181,294<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Other assets<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred costs, non-current<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">20,719<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">20,572<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred income tax assets<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">493<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">505<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Other assets, non-current<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">7,667<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2,033<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Total assets<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,169,859<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,031,230<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>LIABILITIES AND STOCKHOLDERS\u2019 EQUITY<\/strong>\n          <\/td>\n<td colspan=\"3\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Current liabilities<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Accounts payable<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">13,757<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">8,577<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Accrued compensation<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">47,577<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">47,160<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Accrued expenses<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">13,074<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">12,108<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred revenue<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">75,590<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">74,256<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Operating lease liabilities<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4,353<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4,583<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Total current liabilities<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">154,351<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">146,684<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Other liabilities<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred revenue, non-current<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">5,288<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">6,189<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Operating lease liabilities, non-current<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2,839<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">7,885<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Deferred income tax liabilities<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">33,201<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">15,541<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Other liabilities, non-current<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">287<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">241<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Total liabilities<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">195,966<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">176,540<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Commitments and contingencies<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Stockholders&#8217; equity<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Common stock<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">40<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">40<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Treasury stock<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(177,949<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(99,748<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Additional paid-in capital<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">722,737<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">627,982<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Retained earnings<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">429,438<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">336,099<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Accumulated other comprehensive loss<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(373<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(9,683<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Total stockholders\u2019 equity<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">973,893<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">854,690<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Total liabilities and stockholders\u2019 equity<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,169,859<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,031,230<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<\/table>\n<p align=\"center\">\n        \n      <\/p>\n<table align=\"center\" style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"13\" style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>SPS COMMERCE, INC.<\/strong><br \/>\n            <br \/>\n            <strong>CONSOLIDATED STATEMENTS OF INCOME<\/strong><br \/>\n            <br \/>(Unaudited; in thousands, except per share amounts)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"6\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"5\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"6\" style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Three Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"5\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Twelve Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:49%;width:49%;min-width:49%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:11%;width:11%;min-width:11%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:11%;width:11%;min-width:11%;border-bottom: solid black 1pt;padding-left: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:11%;width:11%;min-width:11%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Revenues<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">192,652<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">170,907<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">751,505<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">637,765<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cost of revenues<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">56,957<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">55,585<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">231,629<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">210,714<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Gross profit<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">135,695<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">115,322<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">519,876<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">427,051<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Operating expenses<\/td>\n<td colspan=\"2\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Sales and marketing<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">41,740<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">39,220<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">169,130<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">148,920<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Research and development<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">16,694<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">17,142<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">68,680<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">62,809<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">General and administrative<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">32,996<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">26,354<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">126,594<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">102,929<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Amortization of intangible assets<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">9,579<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">7,862<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,169<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">23,510<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Total operating expenses<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">101,009<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">90,578<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">401,573<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">338,168<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Income from operations<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">34,686<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">24,744<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">118,303<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">88,883<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Other income (expense), net<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,292<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(373<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">5,532<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">10,593<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Income before income taxes<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">35,978<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">24,371<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">123,835<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">99,476<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Income tax expense<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">10,137<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">6,812<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">30,496<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">22,422<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">25,841<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">17,559<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">93,339<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">77,054<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"border-top: double black 3pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income per share<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Basic<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.69<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.47<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.46<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.07<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Diluted<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.68<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.46<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.46<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.04<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Weighted average common shares used to compute net income per share<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"2\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Basic<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,712<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,646<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,881<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,306<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Diluted<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,763<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">38,133<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,992<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,856<\/td>\n<\/tr>\n<\/table>\n<p align=\"center\">\n        \n      <\/p>\n<table align=\"center\" style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"8\" style=\"text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>SPS COMMERCE, INC.<br \/>CONSOLIDATED STATEMENTS OF CASH FLOWS<br \/><\/strong>(Unaudited; in thousands)<strong><br \/><\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Twelve Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:75%;width:75%;min-width:75%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cash flows from operating activities<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Net income<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">93,339<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">77,054<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Reconciliation of net income to net cash provided by operating activities<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Deferred income taxes<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">18,909<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(9,786<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Depreciation and amortization of property and equipment<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">21,089<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">18,721<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Amortization of intangible assets<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,169<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">23,510<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Provision for credit losses<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">9,918<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">7,683<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Stock-based compensation<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">53,728<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">54,557<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Other, net<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(1,087<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">577<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Changes in assets and liabilities, net of effects of acquisitions<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Accounts receivable<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(20,297<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(9,653<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Deferred costs<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">157<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(3,120<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Other assets and liabilities<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(28,686<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(7,313<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Accounts payable<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4,715<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">796<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Accrued compensation<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(3,721<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,434<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Accrued expenses<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(3,568<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4,115<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Deferred revenue<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(787<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">728<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 30.0px;vertical-align: bottom\">Operating leases<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(2,088<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(1,905<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Net cash provided by operating activities<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">178,790<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">157,398<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cash flows from investing activities<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Purchases of property and equipment<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(26,524<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(20,046<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Purchases of investments<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u2014<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(85,759<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Maturities of investments<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u2014<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">143,275<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Acquisition of business, net<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(142,628<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(147,924<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Net cash used in investing activities<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(169,152<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(110,454<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cash flows from financing activities<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Repurchases of common stock<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(114,277<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(37,567<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Net proceeds from exercise of options to purchase common stock<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">3,861<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4,714<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 10.0px;vertical-align: bottom\">Net proceeds from employee stock purchase plan activity<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">9,584<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">9,827<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 15.0px;vertical-align: bottom\">Net cash used in financing activities<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(100,832<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(23,026<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Effect of foreign currency exchange rate changes<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,532<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(1,982<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net increase (decrease) in cash and cash equivalents<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(89,662<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">21,936<\/td>\n<td style=\"border-top: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cash and cash equivalents at beginning of period<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">241,017<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">219,081<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Cash and cash equivalents at end of period<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">151,355<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">241,017<\/td>\n<td style=\"border-top: solid black 1pt;border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<\/table>\n<p align=\"center\">\n        \n      <\/p>\n<table align=\"center\" style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"16\" style=\"text-align: center;vertical-align: middle\">\n            <strong>SPS COMMERCE, INC.<br \/>NON-GAAP RECONCILIATIONS<br \/><\/strong>(Unaudited; in thousands, except Margin, Adjusted EBITDA Margin, and per share amounts)<strong><br \/><\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"16\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td colspan=\"16\" style=\"border-top: solid black 1pt;border-right: solid black 1pt;border-bottom: solid black 1pt;border-left: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Adjusted EBITDA<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Three Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Twelve Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:49%;width:49%;min-width:49%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">25,841<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">17,559<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">93,339<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">77,054<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px;vertical-align: bottom\">Income tax expense<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">10,137<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">6,812<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">30,496<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">22,422<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px\">Depreciation and amortization of property and equipment<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">5,787<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">4,711<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">21,089<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">18,721<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px\">Amortization of intangible assets<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">9,579<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">7,862<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">37,169<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">23,510<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px\">Stock-based compensation expense<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">10,410<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">12,293<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">53,728<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">54,557<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px\">Realized (gain) loss from investments held and foreign currency impact on cash and investments<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">290<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">2,521<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(388<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(115<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px\">Investment income<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(1,036<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(2,205<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(4,649<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle\">(10,582<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 20.0px;vertical-align: bottom\">Other<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(546<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">86<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">583<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,064<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Adjusted EBITDA<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">60,462<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">49,639<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">231,367<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">186,631<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<\/table>\n<p>\n        \n      <\/p>\n<table align=\"center\" style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"16\" style=\"border-top: solid black 1pt;border-right: solid black 1pt;border-left: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Adjusted EBITDA Margin<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Three Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<td style=\"border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-top: solid black 1pt;border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Twelve Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:49%;width:49%;min-width:49%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Revenue<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">192,652<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">170,907<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">751,505<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">637,765<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">25,841<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">17,559<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">93,339<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">77,054<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Margin<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">13<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">10<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">12<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">12<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Adjusted EBITDA<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">60,462<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">49,639<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">231,367<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">186,631<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Adjusted EBITDA Margin<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">31<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">29<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">31<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">29<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">%<\/td>\n<\/tr>\n<\/table>\n<p>\n        \n      <\/p>\n<table align=\"center\" style=\"border-collapse: collapse;width:100%;border-collapse:collapse\">\n<tr>\n<td colspan=\"16\" style=\"border-top: solid black 1pt;border-right: solid black 1pt;border-bottom: solid black 1pt;border-left: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Non-GAAP Income per Share<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Three Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"7\" style=\"border-bottom: solid black 1pt;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>Twelve Months Ended<\/strong><br \/>\n            <br \/>\n            <strong>December 31,<\/strong>\n          <\/td>\n<\/tr>\n<tr>\n<td style=\"max-width:49%;width:49%;min-width:49%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2025<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"max-width:10%;width:10%;min-width:10%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: center;vertical-align: middle;vertical-align: bottom\">\n            <strong>2024<\/strong>\n          <\/td>\n<td style=\"max-width:1%;width:1%;min-width:1%;border-top: solid black 1pt;border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">25,841<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">17,559<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">93,339<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">77,054<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Stock-based compensation expense<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">10,410<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">12,293<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">53,728<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">54,557<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Amortization of intangible assets<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">9,579<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">7,862<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,169<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">23,510<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Realized (gain) loss from investments held and foreign currency impact on cash and investments<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">290<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2,521<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(388<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(115<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Other<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(546<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">86<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">583<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1,064<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Income tax effects of adjustments<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(2,344<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(6,371<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(22,279<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">(24,505<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">)<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Non-GAAP income<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">43,230<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">33,950<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">162,152<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">131,565<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Shares used to compute net income and non-GAAP income per share<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Basic<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,712<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,646<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,881<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,306<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Diluted<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,763<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">38,133<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,992<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">37,856<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income per share, basic<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.69<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.47<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.46<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.07<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Non-GAAP adjustments to net income per share, basic<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.46<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.43<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.82<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.46<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Non-GAAP income per share, basic<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.15<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.90<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4.28<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">3.53<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td colspan=\"3\" style=\"vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Net income per share, diluted<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.68<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.46<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.46<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">2.04<\/td>\n<td style=\"padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: middle;text-align: left;padding-left: 25.0px;vertical-align: bottom\">Non-GAAP adjustments to net income per share, diluted<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.46<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.43<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.81<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.44<\/td>\n<td style=\"border-bottom: solid black 1pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: bottom\">Non-GAAP income per share, diluted<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">1.14<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">0.89<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">4.27<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<td style=\"vertical-align: bottom\">\u00a0<\/td>\n<td style=\"border-bottom: double black 3pt;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">$<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;padding-right: 0;text-align: right;vertical-align: middle;vertical-align: bottom\">3.48<\/td>\n<td style=\"border-bottom: double black 3pt;padding-left: 0;text-align: left;vertical-align: middle;vertical-align: bottom\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<td>\u00a0<\/td>\n<\/tr>\n<\/table>\n<p align=\"left\">\n        <em>The annual per share amounts may not cross-sum due to rounding.<\/em>\n      <\/p>\n<p>Contact:<br \/>Investor Relations<br \/>The Blueshirt Group<br \/>Irmina Blaszczyk <br \/>SPSC@blueshirtgroup.com<\/p>\n<p>      <img decoding=\"async\" alt=\"\" class=\"__GNW8366DE3E__IMG\" src=\"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\" \/><br \/>\n      <br \/>\n      <img decoding=\"async\" alt=\"\" src=\"https:\/\/ml.globenewswire.com\/media\/NzY5NThlODYtNGVkYS00NTRhLTlmNWQtMjk3MDgyYmJlZTgyLTEwMjc4MjQtMjAyNi0wMi0xMi1lbg==\/tiny\/SPS-Commerce-Inc-.png\" \/>\n    <\/div>\n<div class=\"mw_contactinfo\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Company delivers 100th consecutive quarter of topline growth Fourth quarter 2025 re venue grew 13% and recurring revenue grew 14% from the fourth quarter of 2024 Announces planned retirement of Chief Financial Officer and appointment of new Chief Financial Officer Announces increase to Share Repurchase Program\u00a0 MINNEAPOLIS, Feb. 12, 2026 (GLOBE NEWSWIRE) &#8212; SPS Commerce, Inc. (NASDAQ: SPSC), the leading intelligent supply chain network, today announced financial results for the fourth quarter and year ended December 31, 2025. Financial Highlights Fourth Quarter 2025 Financial Highlights Revenue was $192.7 million in the fourth quarter of 2025, compared to $170.9 million in the fourth quarter of 2024, reflecting 13% growth. Recurring revenue grew 14% from the fourth quarter of 2024. Net income &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-936725","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk\" \/>\n<meta property=\"og:description\" content=\"Company delivers 100th consecutive quarter of topline growth Fourth quarter 2025 re venue grew 13% and recurring revenue grew 14% from the fourth quarter of 2024 Announces planned retirement of Chief Financial Officer and appointment of new Chief Financial Officer Announces increase to Share Repurchase Program\u00a0 MINNEAPOLIS, Feb. 12, 2026 (GLOBE NEWSWIRE) &#8212; SPS Commerce, Inc. (NASDAQ: SPSC), the leading intelligent supply chain network, today announced financial results for the fourth quarter and year ended December 31, 2025. Financial Highlights Fourth Quarter 2025 Financial Highlights Revenue was $192.7 million in the fourth quarter of 2025, compared to $170.9 million in the fourth quarter of 2024, reflecting 13% growth. Recurring revenue grew 14% from the fourth quarter of 2024. Net income &hellip; Continue reading &quot;SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/\" \/>\n<meta property=\"og:site_name\" content=\"Market Newsdesk\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-13T00:01:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\" \/>\n<meta name=\"author\" content=\"Newsdesk\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Newsdesk\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/\"},\"author\":{\"name\":\"Newsdesk\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/#\\\/schema\\\/person\\\/482f27a394d4fda80ecb5499e519d979\"},\"headline\":\"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results\",\"datePublished\":\"2026-02-13T00:01:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/\"},\"wordCount\":2688,\"image\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.globenewswire.com\\\/newsroom\\\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\",\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/\",\"url\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/\",\"name\":\"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.globenewswire.com\\\/newsroom\\\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\",\"datePublished\":\"2026-02-13T00:01:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/#\\\/schema\\\/person\\\/482f27a394d4fda80ecb5499e519d979\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.globenewswire.com\\\/newsroom\\\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\",\"contentUrl\":\"https:\\\/\\\/www.globenewswire.com\\\/newsroom\\\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/#website\",\"url\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/\",\"name\":\"Market Newsdesk\",\"description\":\"Latest Business News in Real Time\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/#\\\/schema\\\/person\\\/482f27a394d4fda80ecb5499e519d979\",\"name\":\"Newsdesk\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g\",\"caption\":\"Newsdesk\"},\"url\":\"https:\\\/\\\/www.marketnewsdesk.com\\\/index.php\\\/author\\\/newsdesk\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/","og_locale":"en_US","og_type":"article","og_title":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk","og_description":"Company delivers 100th consecutive quarter of topline growth Fourth quarter 2025 re venue grew 13% and recurring revenue grew 14% from the fourth quarter of 2024 Announces planned retirement of Chief Financial Officer and appointment of new Chief Financial Officer Announces increase to Share Repurchase Program\u00a0 MINNEAPOLIS, Feb. 12, 2026 (GLOBE NEWSWIRE) &#8212; SPS Commerce, Inc. (NASDAQ: SPSC), the leading intelligent supply chain network, today announced financial results for the fourth quarter and year ended December 31, 2025. Financial Highlights Fourth Quarter 2025 Financial Highlights Revenue was $192.7 million in the fourth quarter of 2025, compared to $170.9 million in the fourth quarter of 2024, reflecting 13% growth. Recurring revenue grew 14% from the fourth quarter of 2024. Net income &hellip; Continue reading \"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results\"","og_url":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/","og_site_name":"Market Newsdesk","article_published_time":"2026-02-13T00:01:36+00:00","og_image":[{"url":"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=","type":"","width":"","height":""}],"author":"Newsdesk","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Newsdesk","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#article","isPartOf":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/"},"author":{"name":"Newsdesk","@id":"https:\/\/www.marketnewsdesk.com\/#\/schema\/person\/482f27a394d4fda80ecb5499e519d979"},"headline":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results","datePublished":"2026-02-13T00:01:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/"},"wordCount":2688,"image":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#primaryimage"},"thumbnailUrl":"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=","inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/","url":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/","name":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results - Market Newsdesk","isPartOf":{"@id":"https:\/\/www.marketnewsdesk.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#primaryimage"},"image":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#primaryimage"},"thumbnailUrl":"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=","datePublished":"2026-02-13T00:01:36+00:00","author":{"@id":"https:\/\/www.marketnewsdesk.com\/#\/schema\/person\/482f27a394d4fda80ecb5499e519d979"},"breadcrumb":{"@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#primaryimage","url":"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE=","contentUrl":"https:\/\/www.globenewswire.com\/newsroom\/ti?nf=OTY1Mzk4MCM3NDIyOTU2IzIwMTYyNTE="},{"@type":"BreadcrumbList","@id":"https:\/\/www.marketnewsdesk.com\/index.php\/sps-commerce-reports-fourth-quarter-and-fiscal-year-2025-financial-results\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.marketnewsdesk.com\/"},{"@type":"ListItem","position":2,"name":"SPS Commerce Reports Fourth Quarter and Fiscal Year 2025 Financial Results"}]},{"@type":"WebSite","@id":"https:\/\/www.marketnewsdesk.com\/#website","url":"https:\/\/www.marketnewsdesk.com\/","name":"Market Newsdesk","description":"Latest Business News in Real Time","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.marketnewsdesk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.marketnewsdesk.com\/#\/schema\/person\/482f27a394d4fda80ecb5499e519d979","name":"Newsdesk","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a0d0bd5b0f0ca12a265a459b13169dac35f33776d8501eda5e68844a366f2f46?s=96&d=mm&r=g","caption":"Newsdesk"},"url":"https:\/\/www.marketnewsdesk.com\/index.php\/author\/newsdesk\/"}]}},"_links":{"self":[{"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/posts\/936725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/comments?post=936725"}],"version-history":[{"count":0,"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/posts\/936725\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/media?parent=936725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/categories?post=936725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marketnewsdesk.com\/index.php\/wp-json\/wp\/v2\/tags?post=936725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}