We solved this by doing the following:
1. Setup a Plan with your fixed cost and a 30-day trial. This will not report oddly, as Trial Periods are fully supported in Stripe and easy to implement.
2. In your app, listen for the invoice.created webhook.
(Filter out the first invoice that is automatically generated for a new signup by looking at the invoice->paid data field = true, and the invoice->subscription->trial_end > now, so you can take actions on that first zero balance invoice as needed, different from normal invoices.)
3. When you receive the webhook, create individual Line Item(s) for your metered usage on the Invoice using the invoice->id provided by the webhook. You can add as many line items as you want/need, it sounds like you may need only one. On the Invoice, the first line item will always be the subscription itself, automatically added by Stripe. Your line items added to the Invoice will be in addition to the "subscription" type line item.
4. Within an hour or so, Stripe will automatically try and pay the Invoice and pull in your Line Items that were added after the webhook call to your app.
5. Listen for the invoice.payment_succeeded and invoice.payment_failed webhooks in your app. Take appropriate action by sending email, updating database etc.
Hope that points you in a possible direction. It's been working for us for the last 6 months very well.