Hollow marker is the consensus estimate; filled is the reported figure, colored by beat or miss.
Outlined bar is the consensus estimate; solid is reported.
Periods without a consensus estimate or a reported figure show a dash.
| Period | EPS estimate | EPS actual | EPS surprise % | Revenue estimate | Revenue actual | Revenue surprise % |
|---|---|---|---|---|---|---|
| Q3 23 | — | $0.11 | — | — | $3.7M | — |
| Q2 23 | — | $0.2 | — | — | $4.3M | — |
| Q1 23 | — | $0.24 | — | — | $4.6M | — |
| Q4 22 | — | $0.18 | — | — | $4.3M | — |
| Q3 22 | — | $0.18 | — | — | $4.2M | — |
| Q2 22 | — | $0.22 | — | — | $4.3M | — |
| Q1 22 | — | $0.14 | — | — | $3.9M | — |
| Q4 21 | — | $0.15 | — | — | $4.1M | — |
| Q3 21 | — | $0.15 | — | — | $3.9M | — |
| Q2 21 | — | $0.19 | — | — | $4.2M | — |
| Q1 21 | — | $0.22 | — | — | $4.4M | — |
| Q4 20 | — | $0.15 | — | — | $4.2M | — |
| Q3 20 | — | $0.17 | — | — | $4.4M | — |
| Q2 20 | — | $0.19 | — | — | $4M | — |
| Q1 20 | — | $0.17 | — | — | $4.1M | — |
| Q4 19 | — | $0.16 | — | — | $4.2M | — |
Reported per-share earnings by fiscal year; the line turns dotted where reported figures end and the analyst consensus begins, with the shaded band marking the low–high range.
Reported revenue by fiscal year; the line turns dotted where reported figures end and the analyst consensus begins, with the shaded band marking the low–high range.
Periods without a consensus estimate or a reported figure show a dash.
| Period | EPS estimate | EPS actual | EPS surprise % | Revenue estimate | Revenue actual | Revenue surprise % |
|---|---|---|---|---|---|---|
| FY25 | — | — | — | — | $17.5M | — |
| FY24 | — | $1.1 | — | — | $13.6M | — |
| FY23 | — | $0.6 | — | — | $15.9M | — |
| FY22 | — | $0.73 | — | — | $16.6M | — |
| FY21 |
Reported revenue per period; the line is the change from the same period a year earlier, on its own left axis.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | $19.2M | $18M | $16.7M | $16.7M | $16.6M | $16.5M | $16.6M | $15.9M | $13.6M | $17.5M |
| YoY change | +17.5% | -6.52% | -6.95% | +0.13% | -0.69% | -0.46% | +0.46% | -4.56% | -13.9% | +28% |
Reported revenue per period; the line is the change from the same period a year earlier, on its own left axis.
Revenue, gross profit, operating income, and net income per period.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | 19.2M | 18M | 16.7M | 16.7M | 16.6M | 16.5M | 16.6M | 15.9M | 13.6M | 17.5M |
| Cost of revenue | — | — | — | — | — | — | — | — | — | — |
| Gross profit | — | — | — | — | — | — | — | — | — | — |
| Gross margin | — | — | — | — | — | — | — | — | — | — |
| Research & development | — | — | — | — | — | — | — | — | — | — |
| Selling, general & administrative | 7.5M | 7.6M | 8.1M | 8.3M | 7.8M | 8.2M | 7.2M | 7M | 7.3M | 7.6M |
| Operating expenses | 7.5M | 7.6M | 8.1M | 8.3M | 7.8M | 8.2M | 7.2M | 7M | 7.3M | 7.6M |
| Operating income | — | — | — | — | — | — | — | — | — | — |
| Operating margin | — | — | — | — | — | — | — | — | — | — |
| Non-operating income, net | — | — | — | — | — | — | — | — | — | — |
| Pretax income | 7.3M | 7M | 4.7M | 4.6M | 4.8M | 5.1M | 5.1M | 4.2M | 6.7M | 5.4M |
| Income tax | 2M | 1.5M | 1.7M | 874K | 900K | 1.1M | 973K | 873K | 439K | 1.2M |
| Net income | 5.2M | 5.5M | 3M | 3.7M | 3.9M | 4.1M | 4.1M | 3.3M | 6.3M | 4.2M |
| Net margin | 27.3% | 30.8% | 18.2% | 22.2% | 23.3% | 24.6% | 24.7% | 21.1% | 45.8% | 24.3% |
| EBITDA | — | — | — | — | — | — | — | — | — | — |
| EPS | 0.91 | 0.97 | 0.53 | 0.65 | 0.68 | 0.73 | 0.73 | 0.6 | 1.1 | — |
| Diluted EPS | 0.9 | 0.95 | 0.52 | 0.64 | 0.67 | 0.72 | 0.73 | 0.6 | 1.1 | — |
Revenue, gross profit, operating income, and net income per period.
Click a row to chart it; unreported figures show a dash.
| Period | Q3 22 | Q4 22 | Q1 23 | Q2 23 | Q3 23 | Q4 23 | Q1 24 | Q2 25 | Q3 25 | Q4 25 | Q2 26 | Q3 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | 4.2M | 4.3M | 4.6M | 4.3M | 3.7M | 3.3M | 3.2M | 4.2M | 4.5M | 4.9M | 4.5M | 4.5M |
| Cost of revenue | — | — | — | — | — | — | — | — | — | — | — | — |
| Gross profit | — | — | — | — | — | — | — | — | — | — | — | — |
| Gross margin | — | — | — | — | — | — | — | — | — | — | — | — |
| Research & development | — | — | — | — | — | — | — | — | — | — | — | — |
| Selling, general & administrative | 2.1M | 2.1M | 1.7M | 1.8M | 2.2M | 730K | 1.7M | 1.8M | 1.9M | 1.9M | 1.9M | 1.8M |
| Operating expenses | 2.1M | 2.1M | 1.7M | 1.8M | 2.2M | 730K | 1.7M | 1.8M | 1.9M | 1.9M | 1.9M | 1.8M |
| Operating income | — | — | — | — | — | — | — | — | — | — | — | — |
| Operating margin | — | — | — | — | — | — | — | — | — | — | — | — |
| Non-operating income, net | — | — | — | — | — | — | — | — | — | — | — | — |
| Pretax income | 1.3M | 1.4M | 1.7M | 1.3M | 797K | 350K | 376K | 1.3M | 1.3M | 1.9M | 1.5M | 1.5M |
| Income tax | 304K | 304K | 396K | 244K | 169K | 64K | 64K | 282K | 300K | 400K | 348K | 335K |
| Net income | 1M | 1M | 1.3M | 1.1M | 628K | 286K | 312K | 978K | 1M | 1.5M | 1.1M | 1.1M |
| Net margin | 25.1% | 24.6% | 29.1% | 25.8% | 16.9% | 8.74% | 9.72% | 23.1% | 22.5% | 29.8% | 25.4% | 25.4% |
| EBITDA | — | — | — | — | — | — | — | — | — | — | — | — |
| EPS | 0.19 | — | 0.24 | 0.2 | 0.11 | — | 0.06 | 0.17 | 0.17 | — | 0.2 | 0.19 |
| Diluted EPS | 0.19 | — | 0.24 | 0.2 | 0.11 | — | 0.06 | 0.17 | 0.17 | — | 0.2 | 0.19 |
Annual history by fiscal year; click a table row below to chart a different metric.
Current values are trailing twelve months where available, otherwise the latest fiscal year; unreported figures show a dash.
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Market cap | 111.4M | 155.9M | 163.8M | 130.5M | 145.7M | 130M | 120.8M | 79.3M | 71.8M | — | — |
| Enterprise value | -48.3M | 16.8M | 53.3M | 17.4M | 25.5M | -24.6M | -31.2M | -15.1M | -428.5K | — | — |
| Shares outstanding | 5.7M | 5.7M | 5.7M | 5.7M | 5.7M | 5.6M | 5.6M | 5.6M | 5.7M | — | — |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| P/E | 21.2 | 28.2 | 54 | 35.1 | 37.7 | 32 | 29.5 | 23.7 | 11.5 | — | — |
| P/S | 5.8 | 8.68 | 9.81 | 7.8 | 8.77 | 7.86 | 7.27 | 5 | 5.26 | — | — |
| P/B | 1.3 | 1.81 | 1.93 | 1.48 | 1.65 | 1.48 | 1.61 | 1.1 | 0.91 | — | — |
| EV/Sales | -2.52 | 0.93 | 3.19 | 1.04 | 1.53 | -1.49 | -1.88 | -0.95 | -0.03 | — | — |
| Earnings yield | 4.71% | 3.54% | 1.85% | 2.85% | 2.65% | 3.13% | 3.39% | 4.22% | 8.71% | — | — |
| FCF yield | 7.13% | 3.81% | 3.49% | 2.78% | 2.23% | 3.59% | 4.55% | 7.51% | 1.33% | — | — |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Net margin | 27.3% | 30.8% | 18.2% | 22.2% | 23.3% | 24.6% | 24.7% | 21.1% | 45.8% | 24.3% | 24.3% |
| ROE | 6.14% | 6.43% | 3.58% | 4.21% | 4.38% | 4.61% | 5.45% | 4.67% | 7.94% | 5.03% | 5.03% |
| ROA | — | — | — | — | — | 0.75% | 0.75% | 0.56% | 0.94% | 0.64% | 0.64% |
| Return on tangible assets | — | — | — | — | — | 0.76% | 0.76% | 0.57% | 0.95% | 0.64% | 0.64% |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Debt / equity | — | — | 0.17 | 0.22 | 0.06 | 0.17 | 0.12 | 0.64 | 0.71 | 0.42 | 0.42 |
| Debt / assets | — | — | — | — | — | 0.03 | 0.02 | 0.08 | 0.08 | 0.05 | 0.05 |
| Effective tax rate | 27.9% | 21.1% | 36% | 19% | 18.9% | 20.7% | 19.2% | 20.7% | 6.56% | 22.1% | 22.1% |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue per share | 3.37 | 3.17 | 2.95 | 2.94 | 2.94 | 2.97 | 2.98 | 2.83 | 2.39 | — | — |
| EPS (basic) | 0.91 | 0.97 | 0.53 | 0.65 | 0.68 | 0.73 | 0.73 | 0.6 | 1.1 | — | — |
| EPS (diluted) | 0.9 | 0.95 | 0.52 | 0.64 | 0.67 | 0.72 | 0.73 | 0.6 | 1.1 | — | — |
| Book value per share | 15 | 15.2 | 15 | 15.5 | 15.6 | 15.8 | 13.5 | 12.8 | 13.8 | — | — |
| FCF per share | 1.4 | 1.05 | 1.01 | 0.64 | 0.57 | 0.84 | 0.98 | 1.06 | 0.17 | — | — |
| Cash per share | 28.1 | 24.5 | 22.1 | 23.2 | 22.2 | 30.5 | 28.9 | 25.1 | 22.5 | — | — |
| Capex per share | 0.04 | 0.03 | 0.12 | 0.31 | 0.33 | 0.05 | 0.04 | 0.07 | 0.05 | — | — |
| Metric | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | Current |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Capex / revenue | 1.06% | 1.02% | 4% | 10.7% | 11.1% | 1.56% | 1.29% | 2.37% | 1.94% | — | — |
| Capex / operating cash flow | 2.19% | 2.72% | 10.3% | 31.3% | 30.3% | 4.52% | 3.63% | 5.9% | 25.3% | — | — |
| Payout ratio | 42.9% | 40.2% | 72.9% | 59.5% | 57.7% | 54.1% | 54% | 66.9% | 36.6% | 55% | 55% |
| Dividend yield | 2.02% | 1.43% | 1.35% | 1.7% | 1.53% | 1.69% | 1.83% | 2.83% | 3.19% | — | — |
Split-adjusted payout per share by ex-dividend date.
| Ex-dividend | Amount |
|---|---|
| Aug 13, 2026 | $0.10 |
| May 7, 2026 | $0.10 |
| Feb 5, 2026 | $0.10 |
| — |
| $0.73 |
| — |
| — |
| $16.5M |
| — |
| FY20 | — | $0.68 | — | — | $16.6M | — |
| FY19 | — | $0.65 | — | — | $16.7M | — |
| FY18 | — | $0.53 | — | — | $16.7M | — |
| FY17 | — | $0.97 | — | — | $18M | — |
| FY16 | — | $0.91 | — | — | $19.2M | — |
| Period | Q3 22 | Q4 22 | Q1 23 | Q2 23 | Q3 23 | Q4 23 | Q1 24 | Q2 25 | Q3 25 | Q4 25 | Q2 26 | Q3 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | $4.2M | $4.3M | $4.6M | $4.3M | $3.7M | $3.3M | $3.2M | $4.2M | $4.5M | $4.9M | $4.5M | $4.5M |
| YoY change | +5.99% | +5.08% | +18% | -0.93% | -10.4% | -23.2% | -30.2% | — | — | — | +6.08% | -0.85% |
What the company owns (left stack) against what it owes plus shareholders' equity (right stack). The two stacks should match — that's the balance.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Cash & short-term investments | 159.8M | 139.1M | 125M | 132.1M | 125.2M | 169.7M | 161M | 140.4M | 128.2M | 122.8M |
| Receivables | 1M | 944K | 961K | 1.1M | 1.1M | 939K | 944K | 1.2M | 1.6M | 1.7M |
| Inventory | — | — | — | — | — | — | — | — | — | — |
| Total current assets | — | — | — | — | — | — | — | — | — | — |
| Property, plant & equipment | -1.1M | -1.4M | -1.1M | 0 | -431K | -956K | -1.4M | -1.6M | -1.9M | -2.1M |
| Goodwill & intangibles | 8.8M | 8.6M | 8.2M | 7.5M | 6.5M | 6.1M | 6M | 5.9M | 6M | 5.8M |
| Total assets | — | — | — | — | — | 543.7M | 544.8M | 595.4M | 665.6M | 668.2M |
| Accounts payable | 605K | 851K | 1M | 1.4M | 1.2M | 686K | 853K | — | — | — |
| Short-term debt | — | — | — | — | — | — | — | — | 51.2M | 0 |
| Total current liabilities | — | — | — | — | — | — | — | — | — | — |
| Long-term debt | — | — | 14.5M | 19M | 5M | 15M | 9M | 46M | 4.8M | 35.8M |
| Total liabilities | — | — | — | — | — | 455.6M | 469.5M | 523.6M | 586.8M | 583.9M |
| Shareholders' equity | 85.4M | 86M | 84.9M | 88.3M | 88.3M | 88.1M | 75.3M | 71.8M | 78.8M | 84.3M |
| Total debt | — | — | 14.5M | 19M | 5M | 15M | 9M | 46M | 56M | 35.8M |
| Net debt | — | — | 4.6M | -17.6M | -29.5M | -15.6M | -733K | 38.8M | 37.9M | 15.4M |
What the company owns (left stack) against what it owes plus shareholders' equity (right stack). The two stacks should match — that's the balance.
Click a row to chart it; unreported figures show a dash.
| Period | Q3 22 | Q4 22 | Q1 23 | Q2 23 | Q3 23 | Q4 23 | Q1 24 | Q2 25 | Q3 25 | Q4 25 | Q2 26 | Q3 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Cash & short-term investments | 167.4M | 161M | 146.8M | 144.9M | 145.6M | 140.4M | 130.5M | 138.2M | 134.1M | 122.8M | 135.1M | 130M |
| Receivables | 905K | 944K | 964K | 1.1M | 1.1M | 1.2M | 1.2M | 1.6M | 1.7M | 1.7M | 1.7M | 1.8M |
| Inventory | — | — | — | — | — | — | — | — | — | — | — | — |
| Total current assets | — | — | — | — | — | — | — | — | — | — | — | — |
| Property, plant & equipment | — | -1.4M | — | — | — | -1.6M | — | — | — | -2.1M | — | — |
| Goodwill & intangibles | 6M | 6M | 6M | 6M | 6M | 5.9M | 5.9M | 5.9M | 5.9M | 5.8M | 5.7M | 5.7M |
| Total assets | — | — | — | — | — | — | 592.2M | 658.1M | 659M | 668.2M | 662.4M | 663.1M |
| Accounts payable | 800K | 853K | 938K | 904K | 1.6M | — | 4.8M | — | — | — | — | — |
| Short-term debt | — | — | — | — | — | — | — | — | — | 0 | — | — |
| Total current liabilities | — | — | — | — | — | — | — | — | — | — | — | — |
| Long-term debt | 5M | 9M | 19M | 37M | 42M | 46M | 50.2M | 47.3M | 39.8M | 35.8M | 19.8M | 16.8M |
| Total liabilities | — | — | — | — | — | — | 525.8M | 578.5M | 576.4M | 583.9M | 574.5M | 575M |
| Shareholders' equity | 80M | 75.3M | 69.4M | 71.6M | 73.6M | 71.8M | 66.4M | 79.6M | 82.6M | 84.3M | 87.9M | 88.1M |
| Total debt | 5M | 9M | 19M | 37M | 42M | 46M | 50.2M | 47.3M | 39.8M | 35.8M | 19.8M | 16.8M |
| Net debt | -6.5M | -733K | 11.3M | 30.3M | 34.4M | 38.8M | 44.5M | 33.2M | 30.4M | 15.4M | 11.3M | 9M |
Cash from operations, what's left after capex, and what went back to shareholders. Bars below the line are cash going out.
Click a row to chart it; unreported figures show a dash.
| Period | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 |
|---|---|---|---|---|---|---|---|---|---|---|
| Net income | 5.2M | 5.5M | 3M | 3.7M | 3.9M | 4.1M | 4.1M | 3.3M | 6.3M | 4.2M |
| Depreciation & amortization | 1.3M | 1.4M | 1.3M | 1.1M | 1.3M | 1.9M | 1.6M | 969K | 734K | 503K |
| Stock-based compensation | 796K | 752K | 642K | 547K | 461K | 75K | 103K | 76K | 69K | 68K |
| Change in working capital | 484K | 260K | 376K | 573K | 337K | -325K | 144K | 2.2M | -760K | 158K |
| Operating cash flow | 9.3M | 6.7M | 6.5M | 5.7M | 6.1M | 5.7M | 5.9M | 6.4M | 1M | 4.1M |
| Capital expenditure | -204K | -183K | -669K | -1.8M | -1.8M | -258K | -214K | -375K | 265K | — |
| Investing cash flow | -25M | 11.3M | -1.3M | 21.4M | 5.8M | -51.2M | -31.7M | 9.8M | 13.8M | 13.3M |
| Dividends paid | -2.3M | -2.2M | -2.2M | -2.2M | -2.2M | -2.2M | -2.2M | -2.2M | -2.3M | -2.3M |
| Share repurchases | -1M | -1.5M | -428K | -1.6M | -3.9M | -1.2M | -658K | 0 | -14K | -178K |
| Financing cash flow | -3.3M | -3.7M | 11.9M | 879K | -20.2M | 6.6M | -8.9M | 34.8M | 993K | -22.7M |
| Net change in cash | -19M | 14.3M | 17.1M | 28M | -8.3M | -38.9M | -34.7M | 50.9M | 15.8M | -5.3M |
| Free cash flow | 7.9M | 5.9M | 5.7M | 3.6M | 3.2M | 4.7M | 5.5M | 6M | 956K | 3.7M |
Cash from operations, what's left after capex, and what went back to shareholders. Bars below the line are cash going out.
Click a row to chart it; unreported figures show a dash.
| Period | Q1 21 | Q2 21 | Q3 21 | Q4 21 | Q1 22 | Q2 22 | Q3 22 | Q4 22 | Q1 23 | Q2 23 | Q3 23 | Q4 23 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net income | 1.3M | 1.1M | 870K | 851K | 771K | 1.2M | 1M | 1M | 1.3M | 1.1M | 628K | 286K |
| Depreciation & amortization | 423K | 447K | 497K | 546K | 530K | 458K | 357K | 300K | 264K | 242K | 232K | 231K |
| Stock-based compensation | 105K | 140K | 106K | 107K | 30K | 31K | 312K | -270K | 20K | 21K | 74K | -39K |
| Change in working capital | -181K | -347K | 128K | 75K | -63K | 313K | 42K | -148K | 161K | -10K | 558K | 1.5M |
| Operating cash flow | 777K | 1.8M | 1.4M | 1.7M | 1.4M | 1.3M | 2.2M | 1M | 1.9M | 1.2M | 1.2M | 2M |
| Capital expenditure | -141K | -34K | -42K | -41K | -88K | -14K | -43K | -69K | -67K | 3K | -38K | -273K |
| Investing cash flow | -2.8M | -12.8M | -22M | -14M | -13.5M | -5.3M | -10.4M | -2.4M | 3.3M | 2M | 2.4M | 2.2M |
| Dividends paid | -561K | -518K | -561K | -560K | -559K | -547K | -545K | -561K | -548K | -570K | -560K | -562K |
| Share repurchases | -31K | -218K | -523K | -460K | -67K | -121K | -410K | -60K | 0 | 0 | 0 | 0 |
| Financing cash flow | -587K | -735K | -1.1M | 9M | -10.6M | -668K | -955K | -621K | 9.5M | 17.4M | 4.4M | 3.4M |
| Net change in cash | -2.6M | -11.7M | -21.7M | -3.2M | -22.7M | -4.7M | -9.2M | -2M | 14.6M | 20.6M | 8M | 7.6M |
| Free cash flow | 278K | 1.7M | 1.3M | 1.5M | 1.3M | 1.2M | 2M | 956K | 1.8M | 1.3M | 1.2M | 1.7M |
| Nov 6, 2025 |
| $0.10 |
| Aug 7, 2025 | $0.10 |
| May 8, 2025 | $0.10 |
| Feb 6, 2025 | $0.10 |
| Nov 7, 2024 | $0.10 |