Condensed Consolidated Statements of Stockholders' Equity (Unaudited) - USD ($) $ in Thousands | Total | Common Stock | Additional Paid-in Capital | Accumulated Deficit | Accumulated Other Comprehensive Income (Loss) |
Beginning balance at Dec. 31, 2021 | $ 33,815 | $ 58 | $ 132,780 | $ (98,785) | $ (238) |
Beginning balance, Shares at Dec. 31, 2021 | | 11,703,430 | | | |
Exercise of stock options | 13 | | 13 | | |
Exercise of stock options, Shares | | 8,528 | | | |
Repurchase of common stock | (1,634) | | (1,634) | | |
Repurchase of common stock, Shares | | (57,623) | | | |
Issuance of common stock from RSUs vested, Shares | | 22,755 | | | |
Issuance of common stock from acquisitions | 14,266 | $ 3 | 14,263 | | |
Issuance of common stock from acquisitions, Shares | | 464,540 | | | |
Stock-based compensation | 1,855 | | 1,855 | | |
Foreign currency translation gain (loss) | 73 | | | | 73 |
Net income (loss) | 387 | | | 387 | |
Ending balance at Mar. 31, 2022 | 48,775 | $ 61 | 147,277 | (98,398) | (165) |
Ending balance, Shares at Mar. 31, 2022 | | 12,141,630 | | | |
Beginning balance at Dec. 31, 2021 | 33,815 | $ 58 | 132,780 | (98,785) | (238) |
Beginning balance, Shares at Dec. 31, 2021 | | 11,703,430 | | | |
Foreign currency translation gain (loss) | (101) | | | | |
Net income (loss) | 7,430 | | | | |
Ending balance at Sep. 30, 2022 | 59,222 | $ 61 | 150,855 | (91,355) | (339) |
Ending balance, Shares at Sep. 30, 2022 | | 12,191,762 | | | |
Beginning balance at Mar. 31, 2022 | 48,775 | $ 61 | 147,277 | (98,398) | (165) |
Beginning balance, Shares at Mar. 31, 2022 | | 12,141,630 | | | |
Exercise of stock options | 2 | | 2 | | |
Exercise of stock options, Shares | | 686 | | | |
Repurchase of common stock | (1,450) | | (1,450) | | |
Repurchase of common stock, Shares | | (49,369) | | | |
Issuance of common stock from ESPP purchases | 489 | | 489 | | |
Issuance of common stock from ESPP purchase, Shares | | 20,630 | | | |
Issuance of common stock from RSUs vested, Shares | | 41,198 | | | |
Stock-based compensation | 2,131 | | 2,131 | | |
Foreign currency translation gain (loss) | (96) | | | | (96) |
Net income (loss) | 3,010 | | | 3,010 | |
Ending balance at Jun. 30, 2022 | 52,861 | $ 61 | 148,449 | (95,388) | (261) |
Ending balance, Shares at Jun. 30, 2022 | | 12,154,775 | | | |
Exercise of stock options | 249 | | 249 | | |
Exercise of stock options, Shares | | 13,475 | | | |
Issuance of common stock from RSUs vested, Shares | | 23,512 | | | |
Stock-based compensation | 2,157 | | 2,157 | | |
Foreign currency translation gain (loss) | (78) | | | | (78) |
Net income (loss) | 4,033 | | | 4,033 | |
Ending balance at Sep. 30, 2022 | 59,222 | $ 61 | 150,855 | (91,355) | (339) |
Ending balance, Shares at Sep. 30, 2022 | | 12,191,762 | | | |
Beginning balance at Dec. 31, 2022 | 60,945 | $ 62 | 153,573 | (92,400) | (290) |
Beginning balance, Shares at Dec. 31, 2022 | | 12,243,929 | | | |
Exercise of stock options | 127 | | 127 | | |
Exercise of stock options, Shares | | 10,063 | | | |
Repurchase of common stock | (1,256) | | (1,256) | | |
Repurchase of common stock, Shares | | (35,369) | | | |
Issuance of common stock from RSUs vested, Shares | | 25,157 | | | |
Stock-based compensation | 2,220 | | 2,220 | | |
Foreign currency translation gain (loss) | (17) | | | | (17) |
Net income (loss) | (1,790) | | | (1,790) | |
Ending balance at Mar. 31, 2023 | 60,229 | $ 62 | 154,664 | (94,190) | (307) |
Ending balance, Shares at Mar. 31, 2023 | | 12,243,780 | | | |
Beginning balance at Dec. 31, 2022 | 60,945 | $ 62 | 153,573 | (92,400) | (290) |
Beginning balance, Shares at Dec. 31, 2022 | | 12,243,929 | | | |
Ending balance at Jun. 30, 2023 | 58,063 | $ 62 | 155,251 | (96,887) | (363) |
Ending balance, Shares at Jun. 30, 2023 | | 12,229,335 | | | |
Beginning balance at Dec. 31, 2022 | $ 60,945 | $ 62 | 153,573 | (92,400) | (290) |
Beginning balance, Shares at Dec. 31, 2022 | | 12,243,929 | | | |
Exercise of stock options, Shares | 17,214 | | | | |
Foreign currency translation gain (loss) | $ (72) | | | | |
Net income (loss) | (6,361) | | | | |
Ending balance at Sep. 30, 2023 | 68,110 | $ 64 | 167,169 | (98,761) | (362) |
Ending balance, Shares at Sep. 30, 2023 | | 12,720,608 | | | |
Beginning balance at Mar. 31, 2023 | 60,229 | $ 62 | 154,664 | (94,190) | (307) |
Beginning balance, Shares at Mar. 31, 2023 | | 12,243,780 | | | |
Exercise of stock options | 17 | | 17 | | |
Exercise of stock options, Shares | | 4,097 | | | |
Repurchase of common stock | (2,392) | | (2,392) | | |
Repurchase of common stock, Shares | | (100,401) | | | |
Issuance of common stock from ESPP purchases | 483 | | 483 | | |
Issuance of common stock from ESPP purchase, Shares | | 25,193 | | | |
Issuance of common stock from RSUs vested, Shares | | 56,666 | | | |
Stock-based compensation | 2,479 | | 2,479 | | |
Foreign currency translation gain (loss) | (56) | | | | (56) |
Net income (loss) | (2,697) | | | (2,697) | |
Ending balance at Jun. 30, 2023 | 58,063 | $ 62 | 155,251 | (96,887) | (363) |
Ending balance, Shares at Jun. 30, 2023 | | 12,229,335 | | | |
Exercise of stock options | 3 | | 3 | | |
Exercise of stock options, Shares | | 3,054 | | | |
Repurchase of common stock | (1,947) | | (1,947) | | |
Repurchase of common stock, Shares | | (93,012) | | | |
Issuance of common stock from RSUs vested, Shares | | 27,014 | | | |
Issuance of common stock from acquisitions | 11,291 | $ 2 | 11,289 | | |
Issuance of common stock from acquisitions, Shares | | 554,217 | | | |
Stock-based compensation | 2,573 | | 2,573 | | |
Foreign currency translation gain (loss) | 1 | | | | 1 |
Net income (loss) | (1,874) | | | (1,874) | |
Ending balance at Sep. 30, 2023 | $ 68,110 | $ 64 | $ 167,169 | $ (98,761) | $ (362) |
Ending balance, Shares at Sep. 30, 2023 | | 12,720,608 | | | |