| Market Cap | $143.5M | |
| Enterprise Value | $139.2M | |
| Revenue | $121.1M | −12.9% |
| Gross Profit | $53.3M | −11.7% |
| EBITDA | $6.8M | −65.0% |
| Net Income | $591,000 | −187.4% |
| Diluted EPS | -$0.21 | −187.5% |
| Free Cash Flow | -$3.6M | +127.6% |
| Ratio | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | Trend · 6y | vs own | vs sector |
|---|---|---|---|---|---|---|---|---|---|
| ▾Margins | |||||||||
| Gross Margin | 44.78% | 48.57% | 45.74% | 46.21% | 42.41% | 42.98% | 25% | 43% | |
| Operating Margin | −2.26% | 9.97% | 9.18% | 8.47% | 2.60% | −3.27% | 8% | 44% | |
| EBITDA Margin | 3.64% | 13.67% | 13.23% | 12.26% | 6.72% | 2.70% | 8% | 46% | |
| NOPAT Margin | −1.79% | 8.64% | 7.65% | 7.16% | 2.17% | −2.59% | 8% | 40% | |
| Net Margin | −1.66% | 8.58% | 7.24% | 7.58% | 2.21% | −2.22% | 8% | 46% | |
| FCF Margin | 4.81% | 11.60% | −2.36% | 12.09% | 1.91% | 4.99% | 58% | 43% | |
| FCFF Margin | — | — | — | 12.56% | 2.45% | — | — | — | |
| FCFE Margin | — | — | — | — | −3.97% | 1.39% | 75% | 29% | |
| OCF Margin | 6.03% | 12.77% | −1.19% | 13.14% | 2.92% | 6.43% | 58% | 42% | |
| Gross Profitability | 38.86% | 39.67% | 48.55% | 42.26% | 36.39% | 32.33% | 8% | 61% | |
| Capex Intensity | 1.22% | 1.17% | 1.17% | 1.05% | 1.01% | 1.43% | 92% | 44% | |
| ▸Returns on Capital · 6 ratios | |||||||||
| ▸DuPont factors (ROE drivers) · 4 ratios | |||||||||
| ▸Earnings quality · 7 ratios | |||||||||
| ▸Liquidity & coverage · 9 ratios | |||||||||
| ▸Leverage · 9 ratios | |||||||||
| ▸Working capital · 8 ratios | |||||||||
| ▸Capital allocation · 2 ratios | |||||||||
| ▸Per share · 6 ratios | |||||||||
| ▸Other · 1 ratios | |||||||||
The five drivers multiply to 3.1% vs reported ROE 2.9%. High ROE from margin and turnover is earned; from the equity multiplier it is borrowed.
| Line | 2020↗ | 2021↗ | 2022↗ | 2023↗ | 2024↗ | 2025↗ |
|---|---|---|---|---|---|---|
| Revenue | $53.8M | $84.9M | $116.8M | $123.3M | $130.7M | $113.8M |
| YoY % | +57.7% | +37.6% | +5.5% | +6.0% | -12.9% | |
| Cost of Revenue | $29.7M | $43.7M | $63.4M | $66.3M | $75.3M | $64.9M |
| YoY % | +46.9% | +45.2% | +4.6% | +13.5% | -13.8% | |
| Gross Profit | $24.1M | $41.2M | $53.4M | $57.0M | $55.4M | $48.9M |
| YoY % | +71.0% | +29.6% | +6.6% | -2.7% | -11.7% | |
| R&D Expense | $5.1M | $5.5M | $7.5M | $7.6M | $8.5M | $9.4M |
| YoY % | +9.1% | +36.1% | +1.2% | +12.2% | +10.4% | |
| SG&A Expense | $11.4M | $15.9M | $19.3M | $21.3M | $23.6M | $22.2M |
| YoY % | +38.6% | +21.6% | +10.5% | +10.5% | -5.7% | |
| Total Operating Expenses | $25.3M | $32.8M | $42.7M | $46.5M | $52.0M | $52.6M |
| YoY % | +29.4% | +30.4% | +8.9% | +11.8% | +1.2% | |
| Operating Income | -$1.2M | $8.5M | $10.7M | $10.4M | $3.4M | -$3.7M |
| YoY % | +26.7% | -2.6% | -67.5% | |||
| Interest Expense | — | — | — | $679,000 | $846,000 | $450,000 |
| YoY % | +24.6% | -46.8% | ||||
| Other Non-Operating Income | -$14,000 | $32,000 | $59,000 | $1.3M | $906,000 | $953,000 |
| YoY % | +84.4% | +2083.1% | -29.7% | +5.2% | ||
| Pretax Income | -$1.2M | $8.4M | $10.1M | $11.0M | $3.5M | -$3.2M |
| YoY % | +20.7% | +8.9% | -68.7% | |||
| Income Tax | -$336,000 | $1.1M | $1.7M | $1.7M | $563,000 | -$695,000 |
| YoY % | +50.5% | +1.3% | -67.0% | |||
| Net Income | -$895,000 | $7.3M | $8.5M | $9.3M | $2.9M | -$2.5M |
| YoY % | +16.2% | +10.4% | -69.1% | |||
| EPS (Basic) | -$0.09 | $0.70 | $0.79 | $0.82 | $0.24 | -$0.21 |
| YoY % | +12.9% | +3.8% | -70.7% | |||
| EPS (Diluted) | -$0.09 | $0.68 | $0.78 | $0.79 | $0.24 | -$0.21 |
| YoY % | +14.7% | +1.3% | -69.6% | |||
| Weighted Avg Shares (Basic) | 10.3M | 10.5M | 10.7M | 11.5M | 12.2M | 12.2M |
| YoY % | +2.0% | +2.0% | +7.4% | +6.0% | +0.4% | |
| Weighted Avg Shares (Diluted) | 10.3M | 10.7M | 10.9M | 11.8M | 12.2M | 12.2M |
| YoY % | +4.6% | +1.2% | +8.4% | +3.9% | -0.3% |
The sector classification is SIC-derived, not official GICS. Statement lines are XBRL facts as filed with the company's home regulator (SEC EDGAR for US filers; ESEF/EDINET and other national regulators for foreign filers); ratios and other derived figures are computed from them. A blank cell means the tag was absent — never imputed.