Using queries in Roam Research it's easy to build your own workflow systems. Learn how to leverage Roam queries and become efficient.
This system is useful for situations when you have an item or element that goes through a sequence or a process.
For example, it could be used for:
- a system for recording books you would like to read, books you have bought and books you have read;
- a list of commissioned blog post authors with details of the status of their articles;
- a marketing funnel.
How the pipeline system works
The system works by giving an item or element a particular tag depending on what stage of the process it is at.
By creating a query for each stage, you can easily see the status of each different element and decide where action needs to be taken.
Setting up the system
There are two steps that need to be taken to set up the system:
- Creating the system.
- Using the system.
1. Creating the system

There are three key stages in setting up the system:
- deciding on the different stages in the pipeline;
- deciding on the tags to be used;
- creating the queries.
1.1. Decide on the different stages in the pipeline
Write down the individual stages in the process.
You’ll also need to work out categories for taking items out of the pipeline — e.g. books you’re not interested in reading anymore or prospective clients who don’t respond to communications. (If you’re already operating the system in another app, you will just need to write down the existing categories you use.)
As you use the system, you may find new contexts arise that you haven’t included or a category you’ve missed out. If this happens, it’s easy to add in extra categories.
When I developed my blog post pipeline system, I identified the following categories:
- Potential authors to contact
- Contacted authors
- Potential authors who didn’t respond
- Authors who have agreed to write a blog post
- Authors who have declined to write a blog post
- Authors who have agreed to write a blog post but then don’t
- Published articles.
1.2. Decide on the tags to be used
Then write down the tags you are going to use for the pipeline system.
You will need two sets of tags:
- a tag to indicate that an item is part of an individual pipeline so the tag should be unique to the specific pipeline. I started off using
#author
but then I realised I used the tag in other contexts. So I changed it to#blogauthor
- a tag for each stage in the pipeline.
These are the tags I use for each of my pipeline categories:
- Potential authors to contact –
#tocontact
- Contacted authors –
#contacted
- Potential authors who don’t respond –
#noresponse
- Authors who have agreed to write an article –
#promised
- Authors who have declined to write an article –
#declined
- Authors who have agreed to write an article but then don’t provide one –
#no_article
- Published articles –
#published
.
1.3. Create the queries
You will need to create queries for each of the pipeline categories.
The structure for each query is the same. You want to search for blocks that include both the #blogauthor
tag and the #relevant_category
tag. So you will be using the AND query operator.
So the query for potential authors to contact is:
{{[[query]]: {and: [[blogauthor]] [[tocontact]]}}}
And the query for contacted authors is:
{{[[query]]: {and: [[blogauthor]] [[contacted]]}}}
I add all the queries to my ‘Blog posts’ page in Roam. I then ‘Add page to shortcuts’ by clicking on the star icon, which appears at the top of each page. This adds the page to the left-hand sidebar so it’s easily accessible at all times.
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.
2. Using the system

There are three key stages in using the system:
- adding items to the pipeline
- updating items as situations change
- reviewing the status of items in the pipeline at regular intervals.
2.1. Adding records to the pipeline
This is a vital stage because if a record isn’t added to the pipeline, it’s in danger of being totally forgotten about.
I use a simple format for each record.
For the parent block, I add [[Author name]]
together with the two relevant tags blogauthor
and #tocontact
to a block in Daily Notes.
I will then add any additional useful information as indented/child blocks. This could include copies of tweets or ideas for potential blog post topics.
If I want to contact the potential author immediately, I will also add it to my to do list.
2.2. Updating records with changes
The purpose of any funnel is to record progress so it’s important that records are updated.
So, whenever anything changes, such as when I message an author or hear back from them, I will:
- visit the ‘Blog Posts’ page by clicking on the link in the left-hand sidebar;
- update the record in the query with relevant information (eg. the author is happy to write an article and thinks it can be finished it in 3 weeks) and the date within an indented block (I do this rather add another entry to Daily Notes so the full record of communications over an article can be found within one parent block);
- where necessary, add a follow-up so a reminder will appear in Daily Notes on the relevant day in the future;
- change the pipeline status to the new category eg from
#contacted
to#promised
.
2.3. Reviewing the status of records in the pipeline at regular intervals
It’s also important to add a regular review of the pipeline into your schedule so you can decide what further action is needed for particular records.
Join the conversation.