tungsten-leads
Leads plugin for Tungsten, the admin panel for FastAPI.
What you get
- Leads list with stages (New, Contacted, Qualified, Proposal sent, Won, Lost), source, owner, deal value and next follow-up.
- Tabs for My leads, Follow-up due, New and Won; filters; search; export to CSV or Excel.
- Bulk actions: assign to a user, mark won, mark lost, delete.
- A timeline on each lead for notes, calls, emails and messages.
- Lead fields: admins add their own form fields (text, number, date, dropdown, checkboxes, yes/no...) from the panel, without code. Values are saved on the lead.
- Dashboard numbers: total, new this week, follow-ups due, won and win rate.
- Optional website form API: POST leads to
<panel>/api/leads.
Install
pip install tungsten-leads
from tungsten_leads import LeadsPlugin
panel.plugin(LeadsPlugin())
panel.create_tables(engine) # creates the leads tables too
Options
LeadsPlugin(
statuses={"new": ("New", "info"), "demo": ("Demo booked", "primary"), "won": ("Won", "success"), "lost": ("Lost", "danger")},
sources={"manual": "Added by hand", "website": "Website", "walk_in": "Walk-in"},
capture_token="long-random-text", # turns on the website form API
dashboard_widget=True,
)
Website form API
curl -X POST https://admin.example.com/admin/api/leads \
-H "X-Leads-Token: long-random-text" -H "Content-Type: application/json" \
-d '{"name": "Amit", "phone": "+91 98765 43210", "city": "Pune"}'
name, email, phone, company and notes go to the lead itself. Any other key is saved in the lead's extra
fields. Send an external_id (the row id in your own site's database) and the same lead is never added twice, so a
form that posts again is safe.
Use it from your code or other plugins
from tungsten_leads import add_activity, create_lead, find_lead, on_lead_created
lead = create_lead(db, name="Amit", phone="+919876543210", source="meta", external_id="meta-lead-id")
add_activity(db, lead, "Asked about the MBA course", type="call")
db.commit()
@on_lead_created
def welcome(db, lead):
... # send a WhatsApp message, an email...
create_lead skips a lead whose external_id is already saved, so the same Meta lead is never added twice.
Hooks for other plugins
leads = panel.get_plugin("leads")
leads.on_lead_created("my-plugin.welcome", lambda db, lead: ...) # only this panel's leads
leads.add_lead_action(lambda: Action("quote").label("Send quote").action(...)) # a button on every lead
leads.add_lead_bulk_action(lambda: BulkAction("tag").label("Tag").action(...)) # a bulk action
More Tungsten plugins
| Package | What it adds | Docs |
|---|---|---|
tungsten-meta-leads |
Facebook and Instagram lead form leads, with one-click setup | Guide |
tungsten-whatsapp |
WhatsApp for leads: click-to-chat, Cloud API or WhatsApp Web | Guide |
tungsten-mcp |
MCP server, so AI assistants like Claude can read and change your data | Guide |
tungsten-tickets |
Help desk: tickets, replies, notes, SLA and a customer support page | Guide |
tungsten-blog |
Blog built for SEO, GEO and AEO, with a live score, sitemap and llms.txt | Guide |
tungsten-seo-audit |
SEO audit of your website: score, fix tips, AI search checks, history | Guide |
tungsten-security-audit |
Security audit with a score and fix tips, plus a login log with lockout | Guide |
Core package: tungsten-admin. Website and docs: https://tungsten.prisminfoways.com/
Metadata
Release files for tungsten-leads 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tungsten_leads-0.1.2.tar.gz | 14.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tungsten_leads-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.0 kB
Release files / tungsten_leads-0.1.2.tar.gz
| Download URL | tungsten_leads-0.1.2.tar.gz |
|---|---|
| Size | 14.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1917ddd750bcfb999fb94be55a30ef5f211b66eae1e7c7d0451ebaf3c2c2f8af
|
|
BLAKE2b-256 checksum How to use checksums |
a08ab21482e54b97d6b4fdfee9d9ccb53a84d54627629979061909c4c84134a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / tungsten_leads-0.1.2-py3-none-any.whl
| Download URL | tungsten_leads-0.1.2-py3-none-any.whl |
|---|---|
| Size | 14.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
143f9199539604256f033bd1702114e2abe4768a109d66b9a0d3b6c227161e21
|
|
BLAKE2b-256 checksum How to use checksums |
1ec3b03306ce5f2380f5148227c741e32871d2cb75dce037eb0803a758e87ca3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|