Roam queries enable you to build powerful workflow systems. Learn how to write and use queries now.
This system is useful when you want to collect ideas or topics that may be scattered over your Daily Notes or across different Roam pages. Particular use cases are creating meeting agendas — or collecting ideas for a report or potential topics for a newsletter.
In a future article, we’ll show another system for situations like a marketing funnel where there is a pipeline and items get moved along a series of different states.
We’ve used the detailed example of creating a meeting agenda below. But at the bottom, we’ve also shown how the system can be modified to fit other use cases.
How the system works
The system works by adding a particular tag or set of tags whenever a potential agenda item comes up. A query then collects all blocks with the relevant tag or tags.
When you need to create the agenda, you can go to your query and choose the items you want included.
In order to keep the query fresh, you will need to move agenda items that have been included or that are no longer considered relevant off the query.
Setting up the system

1. Decide on the tags to use.
If you have just one meeting to collect agenda items for, you can use a simple tag like #agenda
or #meeting
.
If you have several different meetings, you can have:
a) an individual tag for each meeting — eg. #marketingmeeting
and #financemeeting
.
b) a standard #meeting
or #agenda
tag and then have a separate tag for each individual meeting. So, if you have meetings with different direct reports, you can combine the #agenda
tag with their individual names – eg. #agenda #name1
and #agenda #name2
.
2. Decide on the process for changing item status.
It’s important to clear the query of items that have already been included on an agenda or are no longer relevant. Otherwise the query will get filled up with out-of-date or irrelevant items and become less usable.
One way to do this is to use tags that indicate item status eg. #included
and #ignore
.
You can then exclude any agenda items tagged with #included
or #ignore
from your query results.
3. Create the query or queries.
Below is the query that would show all items tagged with #agenda
apart from items that also had #included
or #ignore
tags.
{{query: {and: [[agenda]] {not: {or: [[included]] [[ignore]]} } }}}
And if you were using two tags for agenda items – say #agenda #name1
– this is what your query would look like:
{{query: {and: [[agenda]] [[name1]] {not: {or: [[included]] [[ignore]]} } }}}
It’s important to make sure you add the query to a page where you know you will be able to find it.
For a more detailed description about creating queries, please look at our Queries article. And if you’re having problems with creating a query that works, please ask for help in the Community.
Using the system

1. Tag each potential agenda item.
Whenever you write down an idea for a potential agenda item, add the relevant tag or tags to the block.
2. Check the query when creating your agenda.
When it’s time to create the agenda, go to the relevant query. Then create an agenda block and, for each item that you want to add, either copy the text from the query or block reference it.
3. Keep the query fresh.
To keep the query fresh, you will need to clear items off it by adding either #included
to items that have been included on the agenda or #ignore
to items that are no longer relevant.
Other use cases
If you have another use case, you just need to tweak the system above.
So, for example, if you are collecting ideas for a report, all you need to do is change the tag to a more relevant one like #marketingreport
.
Join the conversation.