| Market Cap | $1.22B | |
| Enterprise Value | $1.21B | |
| Revenue | $548.1M | +6.8% |
| Gross Profit | $110.9M | +8.6% |
| EBITDA | — | — |
| Net Income | $42.0M | +3.5% |
| Diluted EPS | $3.56 | +4.7% |
| Free Cash Flow | $71.7M | +37.5% |
| Ratio | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | Trend · 12y | vs own | vs sector |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ▾Margins | |||||||||||||||
| Gross Margin | — | — | 0.04% | 4.38% | 7.03% | 16.89% | 17.67% | 13.28% | 18.76% | 17.47% | 19.37% | 19.70% | 95% | 26% | |
| Operating Margin | 0.05% | −14.47% | −6.69% | −6.94% | −1.73% | 10.27% | 8.94% | 4.81% | 9.79% | 7.62% | 9.79% | 9.67% | 71% | 65% | |
| EBITDA Margin | 3.56% | −8.92% | −0.01% | −2.00% | 3.69% | 14.82% | 14.03% | 8.90% | 13.53% | 11.18% | — | — | — | — | |
| NOPAT Margin | — | — | — | — | — | 8.78% | 6.65% | 3.66% | 7.38% | 5.48% | 7.91% | 7.37% | 50% | 61% | |
| Net Margin | −4.44% | −16.97% | −6.20% | −7.65% | 11.80% | 9.99% | 6.66% | 3.46% | 6.81% | 4.74% | 6.94% | 6.73% | 63% | 66% | |
| FCF Margin | 5.15% | 27.94% | −0.52% | −7.81% | −12.89% | 12.28% | 14.72% | −5.72% | −1.16% | 7.91% | 6.95% | 8.96% | 71% | 68% | |
| FCFF Margin | — | — | — | — | — | 12.42% | 14.96% | −5.45% | −0.57% | 8.70% | 7.88% | 9.33% | 64% | 45% | |
| FCFE Margin | 3.57% | — | — | — | −12.89% | 12.28% | 19.53% | −9.85% | 1.19% | 7.91% | 7.71% | 8.39% | 72% | 62% | |
| OCF Margin | 8.69% | 31.88% | 1.02% | −5.66% | −10.69% | 15.35% | 19.62% | −1.74% | 3.83% | 12.03% | 11.18% | 12.79% | 71% | 60% | |
| Gross Profitability | 11.53% | 0.23% | 0.03% | 2.52% | 4.46% | 15.21% | 13.54% | 8.08% | 14.28% | 12.99% | 16.18% | 17.88% | 96% | 54% | |
| Capex Intensity | 3.54% | 3.94% | 1.53% | 2.15% | 2.21% | 3.07% | 4.90% | 3.98% | 4.99% | 4.12% | 4.22% | 3.84% | 46% | 33% | |
| ▸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 8.9% vs reported ROE 9.2%. High ROE from margin and turnover is earned; from the equity multiplier it is borrowed.
| Line | 2014↗ | 2015↗ | 2016↗ | 2017↗ | 2018↗ | 2019↗ | 2020↗ | 2021↗ | 2022↗ | 2023↗ | 2024↗ | 2025↗ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Revenue | $403.3M | $173.2M | $149.4M | $132.8M | $172.1M | $279.3M | $285.9M | $333.3M | $457.7M | $444.4M | $492.5M | $526.0M |
| YoY % | -57.1% | -13.7% | -11.1% | +29.6% | +62.3% | +2.4% | +16.6% | +37.3% | -2.9% | +10.8% | +6.8% | |
| Cost of Revenue | — | — | $149.3M | $127.0M | $160.1M | $232.1M | $235.4M | $289.1M | $371.8M | $366.7M | $397.1M | $422.4M |
| YoY % | -15.0% | +26.1% | +45.0% | +1.4% | +22.8% | +28.6% | -1.4% | +8.3% | +6.4% | |||
| Gross Profit | $40.6M | $606,000 | $64,000 | $5.8M | $12.1M | $47.2M | $50.5M | $44.3M | $85.9M | $77.6M | $95.4M | $103.6M |
| YoY % | -98.5% | -89.4% | +8985.9% | +108.0% | +290.1% | +7.1% | -12.4% | +94.0% | -9.6% | +22.9% | +8.6% | |
| SG&A Expense | $24.3M | $20.4M | $16.9M | $14.1M | $16.7M | $18.5M | $25.0M | $28.2M | $41.0M | $43.8M | $47.2M | $52.8M |
| YoY % | -16.2% | -17.0% | -16.4% | +17.8% | +11.0% | +34.9% | +13.1% | +45.4% | +6.7% | +7.7% | +11.9% | |
| Operating Income | $194,000 | -$25.1M | -$10.0M | -$9.2M | -$3.0M | $28.7M | $25.6M | $16.0M | $44.8M | $33.9M | $48.2M | $50.9M |
| YoY % | -10.9% | -37.3% | +179.6% | -24.5% | +42.5% | +5.4% | ||||||
| Interest Expense | $2.3M | $1.3M | $509,000 | $490,000 | $583,000 | $472,000 | $933,000 | $1.2M | $3.6M | $4.9M | $5.7M | $2.6M |
| YoY % | -41.5% | -62.0% | -3.7% | +19.0% | -19.0% | +97.7% | +28.8% | +196.8% | +36.1% | +16.6% | -53.9% | |
| Other Non-Operating Income | $108,000 | $58,000 | -$357,000 | $201,000 | $267,000 | $4.4M | $1.0M | $328,000 | $97,000 | $276,000 | -$213,000 | -$1.8M |
| YoY % | -46.3% | +32.8% | +1541.6% | -77.1% | -67.3% | -70.4% | +184.5% | |||||
| Pretax Income | — | — | — | — | — | $32.6M | $25.6M | $15.2M | $41.4M | $29.3M | $42.4M | $46.5M |
| YoY % | -21.5% | -40.9% | +172.8% | -29.2% | +44.7% | +9.7% | ||||||
| Income Tax | $4.7M | -$8.5M | -$4.1M | -$1.1M | -$3.3M | $4.7M | $6.6M | $3.6M | $10.2M | $8.2M | $8.2M | $11.1M |
| YoY % | +39.0% | -44.8% | +180.6% | -19.5% | -0.5% | +35.5% | ||||||
| Income from Continuing Operations | -$6.2M | -$17.8M | -$6.7M | -$8.4M | $20.3M | $27.9M | — | — | — | — | — | — |
| YoY % | +37.4% | |||||||||||
| Income from Discontinued Operations | -$11.7M | -$11.6M | -$2.5M | -$1.8M | — | — | — | — | — | — | — | — |
| Net Income | -$17.9M | -$29.4M | -$9.3M | -$10.2M | $20.3M | $27.9M | $19.1M | $11.5M | $31.1M | $21.1M | $34.2M | $35.4M |
| YoY % | +37.4% | -31.7% | -39.5% | +170.3% | -32.4% | +62.3% | +3.5% | |||||
| EPS (Basic) | -$1.88 | -$3.07 | -$0.97 | -$1.06 | $2.09 | $2.86 | $1.95 | $1.17 | $3.14 | $2.11 | $3.45 | $3.62 |
| YoY % | +36.8% | -31.8% | -40.0% | +168.4% | -32.8% | +63.5% | +4.9% | |||||
| EPS (Diluted) | -$1.88 | -$3.07 | -$0.97 | -$1.06 | $2.09 | $2.85 | $1.93 | $1.16 | $3.11 | $2.09 | $3.40 | $3.56 |
| YoY % | +36.4% | -32.3% | -39.9% | +168.1% | -32.8% | +62.7% | +4.7% | |||||
| Weighted Avg Shares (Basic) | 9.5M | 9.6M | 9.6M | 9.6M | 9.7M | 9.7M | 9.8M | 9.9M | 9.9M | 10.0M | 9.9M | 9.8M |
| YoY % | +0.5% | +0.3% | +0.3% | +1.2% | +0.2% | +0.5% | +0.7% | +0.6% | +0.8% | -0.8% | -1.4% | |
| Weighted Avg Shares (Diluted) | 9.5M | 9.6M | 9.6M | 9.6M | 9.7M | 9.8M | 9.9M | 9.9M | 10.0M | 10.1M | 10.1M | 9.9M |
| YoY % | +0.5% | +0.3% | +0.3% | +1.2% | +0.5% | +1.0% | +0.6% | +0.8% | +0.7% | -0.1% | -1.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.