fiscallm
Track the AI cost of each user of your app against their subscription revenue. Zero dependencies, Python 3.9+.
The SDK never sits in the path of your AI calls: tracking only queues an event, a background thread sends batches, and it never raises. Prompts and responses are never sent, only token counts.
pip install fiscallm
import os
from fiscallm import Meter
meter = Meter(api_key=os.environ["FISCALLM_KEY"]) # one per process
# user_id must be the user's RevenueCat app user ID.
res = openai_client.chat.completions.create(model=model, messages=messages)
meter.track_openai(res, user_id=user_id, feature="chat")
meter.track_anthropic(message, user_id=user_id)
meter.track_gemini(result, user_id=user_id)
# Streams (sync or async): iterate the returned stream.
stream = meter.track_stream(
openai_client.chat.completions.create(model=model, messages=messages, stream=True,
stream_options={"include_usage": True}),
user_id=user_id,
)
# Priced per unit (FiscaLLM knows the price): minutes, seconds, characters, images
meter.track(user_id=user_id, provider="openai", model="whisper-1", units=12.5, unit="minute")
meter.track(user_id=user_id, provider="google", model="veo-3.1-fast-generate-preview",
units=8, unit="second", variant="1080p")
# Anything else: the exact cost
meter.track(user_id=user_id, provider="fal", model="flux-pro", cost_usd=0.05)
# No RevenueCat? Report payments yourself:
meter.track_revenue(id=invoice_id, user_id=user_id, type="renewal", amount_usd=9.99, fee_pct=0.15)
# Serverless (AWS Lambda, Cloud Functions): before returning
meter.flush() # or: await meter.aflush()
OpenAI-compatible APIs work with meter.track_openai(res, user_id=user_id, provider="groq").
Metadata
Release files for fiscallm 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| fiscallm-0.4.0.tar.gz | 11.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fiscallm-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.2 kB
Release files / fiscallm-0.4.0.tar.gz
| Download URL | fiscallm-0.4.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c5e235c51e8cf5469470fbe915cf548be0078299a480855a09a7c2d344efeb4
|
|
BLAKE2b-256 checksum How to use checksums |
fe360a7e37c861f7d3529e0c3fa66dab18f0060f929fc52a58c3018552b0a705
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Release files / fiscallm-0.4.0-py3-none-any.whl
| Download URL | fiscallm-0.4.0-py3-none-any.whl |
|---|---|
| Size | 9.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3d8d5e3adf5adca4a911ed47cba036fc1c5cc4689b453f333679c466283e2b77
|
|
BLAKE2b-256 checksum How to use checksums |
b0c324958c7c67648405b38fbdae31fbd07160cf473c7b299ef7584e9bfe10e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.0
|
Security for fiscallm 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.