Lightsplit
Split group expenses in chat
- Category
- Finance
- Primary Subcategory
- Personal Finance & Budgeting Aggregators
Integration details
Description
Lightsplit is a shared group ledger designed for trips, households, and teams, managed entirely through conversation. Easily create groups and share access via Web, LINE, or Telegram. Track expenses, income, and settlements with equal, weighted, or custom splits across multiple currencies. Attach receipts, optimize debt settlements with minimal transfers, manage shared to-do lists, set budgets, and view category-by-category spending breakdowns effortlessly.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Personal Finance & Budgeting Aggregators
- Secondary Subcategories
- None listed
- Brand
- Lightsplit
- Access
- Account required
- First tracked
- 2026-09-13
- Tool count
- 26
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Personal Finance & Budgeting Aggregators
View Category26 tools agents can invoke
Add people to a group by name, and return the group's full roster afterwards — including the new member_ids you need before you can record anything for them. Added members are placeholders: the person does not need a Lightsplit account, and becomes 'seated' only if they later open a share link and claim the seat — which the group's `public_permission` must be 'login' to allow. If the user wants these people to join for real, check that setting in get_group and set it with update_group. Only the group's owner may do this. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Tick a reminder off the group's list as done. Get the reminder_id from list_reminders. Use uncomplete_reminder to put it back if it was ticked off by mistake.
Record an expense: money the group spent, to be shared out among its members. Member ids come from get_group; call it first if you do not already have this group's roster. In that roster is_caller marks the member row belonging to the person whose token this is, which is who 'I', 'me' and 'my share' refer to. HOW THE MONEY IS DIVIDED `splits` says who the money was FOR: - omit `splits` entirely -> split equally among ALL active members of the group - [{member_id}, {member_id}] -> split equally among just those people - [{member_id, share: 2}, {member_id, share: 1}] -> weighted, so the first person carries a double portion - [{member_id, amount: 300}, {member_id, amount: 900}] -> exact figures; then EVERY entry needs an amount and they must add up to `amount` Mixing `share` and `amount` in one call is rejected rather than guessed at. `payers` says who PUT THE MONEY IN: - omit `payers` -> the caller (the member with is_caller=true) paid all of it - [{member_id}] -> that one member paid all of it - [{member_id, amount}, ...] -> several payers; every one needs an amount and they must add up to `amount` Every figure is POSITIVE. The direction of the money comes from which tool you call, never from a minus sign. ATTACHING A RECEIPT is not supported right now — there is no way to get an image from this conversation into Lightsplit through these tools, so do not offer it or claim it worked. `image_cache_keys` takes handles, never pixels, and a photo here cannot be turned into one; leave it out. What to do instead: record the transaction, then give the user the reply's `links` and tell them they can add the photo on that page themselves. The category icon is likewise not settable here: Lightsplit infers it from `what`. WHEN YOU REPORT THE RESULT, give the user the reply's `links` — every non-null one, labelled by channel — so they can open the transaction and check it.
Create a new Lightsplit group owned by the caller, and return it together with its roster and its three share links (web, LINE, Telegram) to forward to the other participants. Give the user all three, labelled by channel, and let them pick the one for wherever they are sending it — a web link does not open the group inside LINE or Telegram. The caller is seated automatically — list only the OTHER people in `members`, by the names the user calls them. Those people do not need Lightsplit accounts: they exist as placeholders until someone opens a share link and claims the seat. A share link is the ONLY way another person gets into the group, and claiming a seat through it works only while `public_permission` is 'login'. So whenever the user means to share the group, set `public_permission` to 'login' here — under the default 'deny' the links you hand back let nobody in, and under 'anonymous_view' they only let people look.
Record an income: money the group RECEIVED and shares out — a refund, a deposit returned, a shared payout. Use create_expense for money spent. Member ids come from get_group; call it first if you do not already have this group's roster. In that roster is_caller marks the member row belonging to the person whose token this is, which is who 'I', 'me' and 'my share' refer to. HOW THE MONEY IS DIVIDED `splits` says who the money was FOR: - omit `splits` entirely -> split equally among ALL active members of the group - [{member_id}, {member_id}] -> split equally among just those people - [{member_id, share: 2}, {member_id, share: 1}] -> weighted, so the first person carries a double portion - [{member_id, amount: 300}, {member_id, amount: 900}] -> exact figures; then EVERY entry needs an amount and they must add up to `amount` Mixing `share` and `amount` in one call is rejected rather than guessed at. `payers` says who PUT THE MONEY IN: - omit `payers` -> the caller (the member with is_caller=true) paid all of it - [{member_id}] -> that one member paid all of it - [{member_id, amount}, ...] -> several payers; every one needs an amount and they must add up to `amount` Every figure is POSITIVE. The direction of the money comes from which tool you call, never from a minus sign. ATTACHING A RECEIPT is not supported right now — there is no way to get an image from this conversation into Lightsplit through these tools, so do not offer it or claim it worked. `image_cache_keys` takes handles, never pixels, and a photo here cannot be turned into one; leave it out. What to do instead: record the transaction, then give the user the reply's `links` and tell them they can add the photo on that page themselves. The category icon is likewise not settable here: Lightsplit infers it from `what`. WHEN YOU REPORT THE RESULT, give the user the reply's `links` — every non-null one, labelled by channel — so they can open the transaction and check it.
Add a reminder to a group's shared list — something the group means to buy or do, like 'book the restaurant' or 'buy sunscreen'. A reminder is not an expense: nothing is split and no balance moves. `currency` and `amount` are optional and go together — attach them for a to-buy item with a known price ('sunscreen', 800, JPY), omit BOTH for a plain reminder. A reminder has NO due time and sends NO notification — it is a shared checklist item, not an alarm. There is no argument for a time here, and adding one to `what` does not create one. If the user asks to be reminded at a particular moment, say plainly that Lightsplit cannot notify them, and offer to put the item on the list instead. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Record a transfer: one member handing money directly to another, usually to settle up. Nothing is shared out — this is not a group cost, so there is no `splits` argument. Use this after the user actually pays somebody, typically one of the payments get_settle_transfers suggested. `payer_member_id` defaults to the caller (is_caller=true), so 'I paid Hua 800' needs only the receiver and the amount. Member ids come from get_group; call it first if you do not already have this group's roster. In that roster is_caller marks the member row belonging to the person whose token this is, which is who 'I', 'me' and 'my share' refer to. IF THIS PAYMENT IS ONE get_settle_transfers SUGGESTED, pass `is_settle_up: true` with the suggestion's own payer, receiver and amount. Lightsplit re-checks the plan and refuses with settle_up_state_changed if the balances have moved since you read it — someone else recorded something — which is a refusal to act on rather than to work around: call get_settle_transfers again, tell the user what the plan says now, and record what they actually paid. Leave the flag out when the payment is not one of the suggestions, including a partial or rounded-off one. ATTACHING A RECEIPT is not supported right now — there is no way to get an image from this conversation into Lightsplit through these tools, so do not offer it or claim it worked. `image_cache_keys` takes handles, never pixels, and a photo here cannot be turned into one; leave it out. What to do instead: record the transaction, then give the user the reply's `links` and tell them they can add the photo on that page themselves. That applies here too, and a settle-up is where it bites most: a bank-app screenshot is the commonest receipt there is, so expect the user to have one, and send them to the transaction's page with it rather than saying you attached it. WHEN YOU REPORT THE RESULT, give the user the reply's `links` — every non-null one, labelled by channel — so they can open the transaction and check it.
Delete a group along with every transaction and balance in it. Only the group's owner may do this, and it CANNOT be undone. Confirm with the user, naming the group, before calling. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Remove a reminder from the group's list. Get the reminder_id from list_reminders. For an item that was simply finished, prefer complete_reminder, which keeps it on the list as done; delete_reminder is for a reminder that should no longer be there at all.
Delete a transaction and unwind every balance it touched. Get the transaction_id from list_transactions. This cannot be undone. Confirm with the user — naming the transaction's description and amount — before calling.
Read a group's budgets: the shared group budget everyone sees, plus the caller's own personal budget. Each budget is {amount, period_type}, in the group's primary currency. period_type is 'monthly' or 'all_time'; a null period_type means no budget is set (amount is then 0). personal_budget is null when the caller is not a member of the group. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Get the exchange rate between two currencies. `rate` converts quote into base: quote=JPY, base=TWD, rate=0.21 means 1 JPY is worth 0.21 TWD. You do not need this to record a foreign-currency expense — pass `currency` to create_expense and Lightsplit converts it itself. PASS `group` whenever the question is about a group's money ('what rate are we using for yen?'). A group can be running on a rate its members fixed rather than the market's, and its transactions convert at that one; with `group` you get the number those transactions use, and without it you get the market's, which may not be what the group is spending at.
Read a group: its settings, its full member roster and its share links. Call this FIRST for any group you are about to touch. Every other tool identifies people by member_id, and this is the only place those ids come from. Each member carries: - member_id — what you pass to the other tools - display_name — the name to use when talking to the user - is_caller — true for the member row belonging to the person whose token this is; this is how you resolve 'I', 'me' and 'my share' - is_seated — true when a real Lightsplit account occupies the seat, false for a placeholder - permission — 'edit', 'view', or 'deactivated' for a seat that has been turned off. A deactivated member takes no new money: they are not among the 'all active members' an omitted `splits` divides between, and naming one in a split they were not already part of is refused - balance — their net position in the group's primary currency: positive means the group owes them, negative means they owe the group
Get the shortest set of payments that clears every balance in the group — the answer to 'who owes whom, and how do we settle up?'. Each suggested payment names both members, so you can read it out directly. When the user then actually pays one of them, record it with create_transfer. An empty list means everybody is already square. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Break a group's spending down by category: per-category sums of money spent (expense) and money received (income), in the group's primary currency. Returns two lists, expense and income. Each row is {category, amount_for_primary}, where amount_for_primary carries the ledger's sign — expense rows are NEGATIVE (money out), income rows positive (money in) — so a row's magnitude is what the group spent or received on that category. A row with an empty category is spending Lightsplit has not categorised. Optionally narrow it: `member_id` reports just that one member's share of each transaction, and `from`/`to` restrict it to a date window. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
List a group's shared reminders — its running to-buy / to-do list, the same list everyone in the group sees. Each reminder carries: id (what you pass to complete_reminder, update_reminder and delete_reminder), what (the reminder text), completed (whether it has been ticked off), and an optional currency+amount when the reminder has a price attached. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
List a group's transactions, newest first. Each transaction carries its from/to legs already resolved to display names, so one call is enough to tell the user '1200 for dinner, paid by Ming'. This is where transaction ids come from: call it before update_transaction or delete_transaction. Paging: pass the previous page's `next_cursor` back verbatim as `cursor`, and stop when next_cursor comes back null. The cursor is opaque — never construct or edit one. Narrow with `from`/`to` when the user names a day or a period. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Remove an unseated placeholder member (is_seated=false) from a group. Three refusals worth knowing before you call: - Only the group's OWNER may remove anyone. Anybody else is refused before either of the checks below is reached, so a non-owner gets this answer whatever the member looks like. - A SEATED member — a real Lightsplit account holder, including the caller themselves — cannot be removed here. They have to leave the group themselves in the Lightsplit app; say so rather than trying again. - A member with a non-zero balance cannot be removed. Settle them up first (see get_settle_transfers and create_transfer), then remove them. Member ids come from get_group; call it first if you do not already have this group's roster. In that roster is_caller marks the member row belonging to the person whose token this is, which is who 'I', 'me' and 'my share' refer to.
Turn a Lightsplit share link into a group id, and return the same group's links for the other channels. You rarely need this: every other tool's `group` argument already accepts a share link. Reach for it when the user has a link and wants the same group on other channels ('send me the LINE version') — and hand back every link that comes with it, not just the one they named, so they can still choose. It only succeeds for a group the caller may already see, so it cannot be used to probe whether a link is real.
Set (or clear) the group's shared spending budget — the cap everyone in the group sees. Only the group's OWNER may set it; anyone else is refused. To set one, pass `amount` (>= 0, in the group's primary currency) and `period_type` ('monthly' or 'all_time'). To CLEAR it, omit both `amount` and `period_type`. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Set (or clear) the caller's OWN personal spending budget in a group — private to them, not the shared group budget. The caller must be a member of the group. To set one, pass `amount` (>= 0, in the group's primary currency) and `period_type` ('monthly' or 'all_time'). To CLEAR it, omit both. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Reopen a reminder that was ticked off, putting it back on the group's active list. Get the reminder_id from list_reminders.
Rename a group, change its note, or change who may open its share links. Only the fields you pass are changed; everything else is left alone. This is where you open a group up for sharing: other people can only get in through a share link, and only `public_permission` 'login' lets them claim a seat. Only the group's owner may do this. The group to act on. Accepts either a Lightsplit group id or any Lightsplit share link (web, LINE or Telegram) — pass through whatever the user gave you, unchanged.
Rename a member of a group, or change their permission between 'edit' and 'view'. Renaming only has a visible effect on an UNSEATED placeholder member (is_seated=false). Once a real Lightsplit account claims the seat, that account's own display name is shown everywhere and `name` is ignored. Only the group's owner may do this. Member ids come from get_group; call it first if you do not already have this group's roster. In that roster is_caller marks the member row belonging to the person whose token this is, which is who 'I', 'me' and 'my share' refer to.
Edit a reminder. Editing REPLACES the reminder wholesale, so pass `what` as the full text you want it to read, not just the change. Get the reminder_id from list_reminders. `currency` and `amount` go together, exactly as in create_reminder: pass both to set (or change) the reminder's price, omit BOTH to leave it a plain reminder with no price.
Edit an existing transaction. Only the fields you pass change; everything else is left alone. Get the transaction_id from list_transactions. ONE RULE: if you change `amount` or `currency`, you must ALSO say how the transaction now divides — pass `splits`, or `equal_split: true`. `payers` on its own does not satisfy it. And if the transaction has MORE THAN ONE payer and the amount changes, restate `payers` as well: one payer scales to the new total unambiguously, several do not. Rescaling the old division to a new total would have to guess, and the guess is somebody's money. On a TRANSFER, `receiver_member_id` retargets who received the money, and `splits` and `equal_split` are rejected, because a transfer is not divided at all; on an expense or an income it is `receiver_member_id` that is rejected. Passing an argument that means nothing for the transaction's type is rejected rather than ignored, so a refusal here means the edit did not half-happen. A member whose seat has since been deactivated can still be named on a transaction they were already part of — correcting last year's dinner does not require re-activating everybody who was at it. Adding a deactivated member who was NOT already on the transaction is refused. A transaction's KIND cannot be changed — an expense cannot become an income or a transfer — and a transaction cannot be moved to another group. For either, delete it and create it again with the right tool instead. HOW THE MONEY IS DIVIDED `splits` says who the money was FOR: - omit `splits` entirely -> split equally among ALL active members of the group - [{member_id}, {member_id}] -> split equally among just those people - [{member_id, share: 2}, {member_id, share: 1}] -> weighted, so the first person carries a double portion - [{member_id, amount: 300}, {member_id, amount: 900}] -> exact figures; then EVERY entry needs an amount and they must add up to `amount` Mixing `share` and `amount` in one call is rejected rather than guessed at. `payers` says who PUT THE MONEY IN: - omit `payers` -> the caller (the member with is_caller=true) paid all of it - [{member_id}] -> that one member paid all of it - [{member_id, amount}, ...] -> several payers; every one needs an amount and they must add up to `amount` Every figure is POSITIVE. The direction of the money comes from which tool you call, never from a minus sign. WHEN YOU REPORT THE RESULT, give the user the reply's `links` — every non-null one, labelled by channel — so they can open the transaction and check it.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Lightsplit alternatives on ChatGPT?
As of 2026-09-13, Lightsplit competes with AI Expense, Bankrate, Billbo, Borderless Budget, Capycash, ClarityTrack, ClearCash, CloFin, Era Context, facturillo, FinPilot, Fold, Granite Finance, Kash, LedgerLens, Ledgy, Monay, Moneytree, MyTruv: AI Money Autopilot, Nanyfin, Pane, Per Diem, Pocket Ledger Expense Tracker, Pocket Runway, PocketSmith Complete Access, Simply Family Budget, SimsaSplit, Superbrain Finanzas, Synci, ualet, Vings, WalleK, Whisper Money, YNAB: Get Good At Money, Yoshi in ChatGPT Personal Finance & Budgeting Aggregators, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.