match a notion record before adding another row
keep one booking in one row, even when its details change. a bot updates matching notion rows and creates missing ones from your incoming list.
you get a result for each item. match on a unique reference: only the first batch of matches counts, and multiple matches can update the first or fail. preview the changes before writing.

what it does
one list can contain old records and new ones. each incoming item carries its matching rule, creation values and update values. a missing match creates a row; a match updates one. the action returns a result for each item.
paste the database link and let the bot inspect its columns first. creation and update values can differ. tell it which fields to leave alone rather than hoping a broad import will guess.
when you would use it
- keep registrations together. match each workshop booking by its reference.
- refresh the equipment list. update known asset numbers and add new ones.
- avoid supplier name mix-ups. use stable supplier codes in the directory.
- correct attendance records. match the existing entries before adding extra rows for the same people.
try it
paste this into a chat with your bot
on alternate tuesdays at 16:45, read confirmed registration files added in the past two weeks to the workshop registrations folder. compare them with the notion booking database.
match only on booking reference. show proposed creates and updates here. stop when a reference is missing or repeated in the input or destination. ask before writing. after approval, report every item's result. never match by attendee name or retry the whole batch blindly.- when
- alternate tuesdays at 16:45
- needs
- access to the registration files; notion read and write for the chosen database
what comes back looks like this (an example)
registration review
br-231, esme: update session choice in the existing row.
br-232, kaspar: create a registration; no match returned.
br-233: repeated reference; needs your decision.
no writes yet.set it up
- allow only this tracker work. connect notion with the reads and writes the database needs.
- pick a unique reference. paste the database link and name a column such as booking reference.
- test both paths. preview one known match and one new reference before creating or updating.
- account for each result. list failed items separately. leave earlier successes out when retrying just the failures.
what it needs from you
| input | required | what it is |
|---|---|---|
items | yes | Array of items to upsert. |
options | no | Options controlling upsert behavior. |
database_id | no | UUID of the Notion database (legacy). |
data_source_id | no | UUID of the Notion data source (preferred). |
from composio's catalog for Notion (action NOTION_UPSERT_ROW_DATABASE, read 12 november 20264). your bot fills these in from what you tell it.
how dusk bot handles it
dusk bot counts Upsert database rows as a change: it alters something in Notion, and the sending setting does not cover it. a bot you allow only to read can never call it.
the permissions Notion asks for to run it: insert_content, read_content, update_content.
where it stops
- a unique reference keeps the right row in reach. this action reads only the first batch of matches. broad matching can hide the row you need.
- stop when a reference matches twice. the action may update the first or fail. a shared name is too weak a key.
- a batch can half succeed. retrying successful items can repeat changes or create rows if the matching details changed.
try it in 2 minutes
- paste the destination database link
- choose its unique booking or asset reference
- preview one existing record and one new one
- review each result before retrying anything
quick checklist
- every incoming reference is present and unique
- each matching rule narrows to one record
- new values fit the database columns
- successful items stay out of a retry
mistakes people make
using an attendee name to match
two people can share it. use the booking reference instead.
replaying the entire failed batch
some items may already have succeeded. read each result and retry only what needs it.
questions
what does upsert mean for my tracker?
update a match, create when no match returns. each item can use different values for creation and update.
will it always prevent duplicates?
a stable reference is your best defence. weak matching and limited results can still hide an existing row. stop on ambiguity.
can i see which records failed?
yes, each item gets a result. ask for failures separately, then retry only items whose changes did not succeed.
sources
drafted with ai help from the dusk bot docs and the sources listed on this page, then checked against them. if something here is wrong or out of date, write to [email protected].
ask for the notion records that match your conditions
change a notion page property without rewriting its text
a notion bot that keeps the next step easy to find
add a batch of notes to an existing notion page
leave a useful notion comment where it belongs
give new notion notes a proper home