The Content database stores all of your Content projects – long-form videos, Shorts, blog posts, podcast episodes, etc. If it’s a piece of content that you want to plan and track in Creator’s Companion, it goes here.
Content is the primary database in Creator’s Companion; it’s what enables you to capture content ideas, write outlines and scripts, set publish dates, etc. Most of the other databases connect to Content in some way.
Below you’ll find a reference guide for all database templates and properties in the Content database. Properties are in alphabetical order.
Database Templates
Video
content
Podcast
content
Stream
content
Blog Post
content
Newsletter
content
Content Project (Classic)
content
Properties
Archive
Type: Checkbox
Typically used for “archiving” old content ideas that you’d like to clear out of the majority of your Ideas views.
Was called “Graveyard” in previous versions of this template.
Channel
Type: Relation
The channel this piece of content will be published under – e.g. a YouTube channel, blog, or podcast.
This relation property connects to the Content relation property in the Channels database.
Comments
Type: Number
The number of comments this piece of content has gained.
You can input this data manually, or pull it in via APIs such as the YouTube Data API.
Created
Type: Created Time
The date and time at which this page was created.
Description
Type: Rich Text
A short pitch for this piece of content. Useful when brain-dumping ideas in the Content Ideas page.
Edit Stage
Type: Status
Useful for tracking editing stages for video projects that are set to Editing in the main Status property.
See the Edit Bay page to learn more.
Unlock the Content database to add more options.
Name | Description |
---|---|
Group: To-do | |
To Ingest | The initial stage of the edit, when footage needs to be ingested (offloaded to editing workstation or server). Proxies can optionally be made. |
Group: In progress | |
Final Cut | During this stage, the video’s final cut is done. |
Assembly | Clips are being trimmed down and marked as usable or thrown out. |
Rough Cut | The initial cut is done during this stage. For YouTube videos, this will often be the “A-roll Cut” or “Talking Head Cut”. If separate VFX/Sound teams will be working on this while cutting is happening, feel free to skip directly from Rough to Final. |
VFX | Visual effects, motion graphics, and animations are created and brought into the video at this stage. |
SFX & Music | In this stage, sound effects are added to the video. Background music is also selected and added in – or scoring is done. |
Color Grading | In this stage, color grading is added to any shots that need grading in order to achieve the video’s intended look and mood. |
Group: Complete | |
Edit Locked | At this point, the edit is done (or “locked”) and the video is ready to be uploaded and scheduled for publishing. |
Editor
Type: People
If this video has a specific editor, add them here.
Files
Type: Files & Media
Add any files related to this Content Project to this property, such as a thumbnail image.
Focus Keywords
Type: Relation
Any keywords you’re focusing on ranking for with this piece of content. Used mainly for SEO-focused written content.
This Relation property connects to the Associated Content Relation property in the Keywords database.
Idea Merit
Type: Multi Select
Used in the Validation dashboard and views. If there’s a particular reason this idea deserves your time investment, you can mark that reason here.
Unlock the Content database to add new options.
Name | Description |
---|---|
Content Pillar | The idea fits one of the “content pillars” – i.e. a core part of your content strategy. |
Proven Topic | You – or other creators – have already created high-performing content around this topic or niche. |
Trending Topic | This idea is centered around a trending/popular topic. |
Search Volume | This idea’s related keywords have high search volume. |
Needs to Exist | This idea simply needs to exist, and you don’t need no stinkin’ stats or fancy spreadsheets to justify it! |
Gut Feeling | You’ve just a gut feeling that this idea will perform well. |
Likes
Type: Number
The number of likes this piece of content has gained.
You can input this data manually, or pull it in via APIs such as the YouTube Data API.
Media Type
Type: Select
Allows you to label this content project with its media type – e.g. Short, Long-Form, Stream, Written, etc.
Useful as channels now allow you to post multiple types of media.
Unlock the Content database to add more options.
Name | Description |
---|---|
Long-Form | Long-form video content. |
Short | Short-form video content, made for YouTube Shorts, TikTok, Instagram Reels, etc. |
Stream | Planned live streams for YouTube, Twitch, Twitter, etc. |
Audio | Audio-first content, such as a podcast. |
Written | Written content, such as blog posts or long Twitter/X posts. |
Name
Type: Title
The name of this content project – e.g. video, blog post podcast episode, etc.
No.
Type: Number
If you and/or your team number pieces of content manually, you can use this property to do so.
This can be useful if you also add numbers to the names of the folders for each project in your computer’s file system, or on a server. E.g. “047 – How to Gain Self Discipline”.
Paid
Type: Checkbox
Use this checkbox on sponsored content to mark whether or not the deal has been paid by the sponsor.
Pay Due Date
Type: Formula
If this piece of content is sponsored, this property will return the date at which you should be paid.
It is calculated based on the Publish Date of the content and the Sponsor’s pay schedule setting (e.g. Net30 would pay 30 days after the publish date).
ifs(
prop("Sponsor").empty(),
"".parseDate(),
lets(
sponsor,
prop("Sponsor").first(),
eomBuffer,
if(
sponsor.prop("Pay Structure").test("EOM"),
dateBetween(
prop("Publish Date").dateAdd(1, "months").dateSubtract(prop("Publish Date").date(), "days"),
prop("Publish Date"),
"days"
),
0
),
netBuffer,
ifs(
sponsor.prop("Pay Structure").test("60"),
2,
sponsor.prop("Pay Structure").test("30"),
1,
0
),
ifs(
sponsor.prop("Pay Structure") == "On Deal Close" or sponsor.prop("Pay Structure").empty(),
"".parseDate(),
sponsor.prop("Pay Structure") == "On Publish",
prop("Publish Date"),
prop("Publish Date").dateAdd(eomBuffer, "days").dateAdd(netBuffer, "months")
)
)
)
Code language: JavaScript (javascript)
Performance Notes
Type: Rich Text
Add any notes about this video’s performance here.
Publish Date
Type: Date
Time Format: Hidden (prevents times from showing)
The intended publish date of this piece of content. This date is used for the calendar view in the Project tracker. You can also update this date after a piece of content goes live in the case that it was published on a different date than planned.
Repurposing
Type: Relation
Use this Relation property to relate (or create) other content projects that represent repurposed versions of this content project.
E.g. if this is a YouTube video, you may also want to create and track a blog post and several Shorts/TikToks.
Research
Type: Relation
Any research items associated with this content project.
This Relation property connects to the Content Relation property in the Research database.
Review Date
Type: Date
Use this to set a date at which this content should be reviewed or updated.
For example, you may have a blog post that needs to be updated every year.
In the Maintenance view, you’ll see upcoming content that needs to be reviewed, ensuring you won’t forget about it.
Row Updated
Type: Last Edited Time
The date and time that this page was last updated.
Sponsor
Type: Relation
If this piece of content is sponsored, you can add the sponsor’s page from the Sponsors database here.
This relation property connected to the Content relation property in the Sponsors database.
Sponsor Performance
Type: Select
If you’re working with sponsors who provide performance data, you can tag sponsored posts by their relative performance here.
This is a select property, as many sponsors don’t share exact conversion data.
Unlock the Content database to add new options.
Name | Description |
---|---|
Great | Performance was much better than expected. |
Good | Performance was on-par with expectations or slightly better. |
Okay | Performance was slightly below expectations, but within tolerances. |
Poor | Performance was far below expectations; the audience did not resonate with the offer. |
Sponsor Rate
Type: Number
If this piece of content is sponsored, enter the rate for it here.
Sponsor URL
Type: Url
If this piece of content is sponsored, you can add the sponsor’s landing page/promo link URL that you’ve been provided.
Stats
Type: Formula
Formats the numbers from Views, Likes, and Comments into a labeled, aesthetic property used on the Thumbnail view within the Completed section of certain Channel pages.
if(
prop("Views").empty() and prop("Likes").empty() and prop("Comments").empty(),
"",
lets(
firstCommaSetter,
"(\d+)(\d{3})",
secondCommaSetter,
"(\d+)(\d{3},\d{3})",
views,
if(
prop("Views").empty(),
"",
("👀 " + prop("Views").
replace(firstCommaSetter,"$1,$2").
replace(secondCommaSetter,"$1,$2")
).style("c","b","green","green_background")
),
likes,
if(
prop("Likes").empty(),
"",
("👍 " + prop("Likes").
replace(firstCommaSetter,"$1,$2").
replace(secondCommaSetter,"$1,$2")
).style("c","b","green","green_background")
),
comments,
if(
prop("Comments").empty(),
"",
("💬 " + prop("Comments").
replace(firstCommaSetter,"$1,$2").
replace(secondCommaSetter,"$1,$2")
).style("c","b","green","green_background")
),
[views, likes, comments].filter(!current.empty()).join("\n")
)
)
Code language: JavaScript (javascript)
Status
Type: Status
The current status of this content project. Use this property to see which projects are currently in the research stage, which are being edited, which are completed, etc.
Content is Planned by default unless added in an Idea view.
Unlock the Content database to add new options.
Name | Description |
---|---|
Group: To-do | |
Idea | All projects start in the Idea stage, unless you create them in a specific view that forces another Status option. Ideas are just that – ideas. Set a project to Planned to “greenlight” it. |
On Hold | Use this option for in-progress projects that you need to put on temporary hold. Note: You can use the Archive checkbox property to “archive” a project without fully deleting it. |
Group: In progress | |
Planned | Once a project goes to Planned, it’s “greenlit” – you’ve committed to producing it. |
Research | The research/info-gathering stage of the project. |
Writing | The writing/scripting stage of the project. |
Review | If you’re working on a team, you may need to have someone review the script/outline before filming, or before publishing written content. |
Recording | The filming/recording stage of the project. Content projects in Recording will show up in the Film Queue page within Content Projects. |
Editing | The editing stage of the project. Content projects in Recording will show up in the Edit Bay page within Content Projects. |
Ready to Publish | When a project’s final edit is finished, market Ready to Publish so final uploading and checks can be done. |
Needs Update | Use this status for projects that need regular updates – e.g. a tutorial that needs to list the latest version numbers of included software tools. |
Group: Complete | |
Completed | Finished, published projects. |
Tags
Type: Multi Select
If you’ve defined multiple types of content within a single channel (often called Content Pillars), you can use this property to tag pieces of content with those types/pillars.
Unlock the Content database to add new options.
Name | Description |
---|---|
Sample Tag | Change this to anything you like. Tags are free-form values. |
Tasks
Type: Relation
Tasks that are part of this content project. This Relation property connects to the Content Relation property in the Tasks database.
Task Meta
Type: Formula
This formula property displays the number of active tasks in the content project, along with the number of overdue tasks.
lets(
active,
prop("Tasks")
.filter(
current.prop("Status") != "Done" and current.prop("Status") != current.prop("Localization Key").at(2).last()
)
.length(),
overdue,
prop("Tasks")
.filter(
current.prop("Status") != "Done" and current.prop("Status") != current.prop("Localization Key").at(2).last()
and now().dateBetween(current.prop("Due"), "days") > 0
)
.length(),
ifs(
prop("Tasks").length() == 0,
"",
active == 0,
"",
if(
overdue == 0,
(active + " Active").style("blue"),
(active.style("b") + " Active - ").style("blue")
+ (overdue.style("b") + " Overdue").style("red")
)
)
)
Code language: JavaScript (javascript)
URL
Type: Url
The public URL for this piece of content, once uploaded/published.
Views
Type: Number
The number of views this piece of content has gained (or pageviews for blog content, streams/downloads for podcast episodes, etc.)
You can input this data manually, or pull it in via APIs such as the YouTube Data API.
Writer
Type: People
If this video has a specific writer, add them here.
YouTube Chapters
Type: Formula
If you have B-Roll items related to this Content project with a Meta type of Chapter, this formula will create a YouTube chapter list from them and their timecodes.
This formula expects timecodes to be in 00:00:00:00 format (hours:minutes:seconds:frames).
lets(
chapterMarkers,
prop("B-Roll").filter(current.prop("Meta").includes("Chapter")).sort(current.prop("Timecode")).map(
current.prop("Timecode")
.replace("^(.*?):\d{2}$", "$1")
.replace("^00:(\d{2}:\d{2})","$1")
+ " - " + current.prop("Name")
),
if(
chapterMarkers.first().test("^00:00") or chapterMarkers.empty(),
chapterMarkers.join("\n"),
"00:00 - Introduction\n" + chapterMarkers.join("\n")
)
)
Code language: JavaScript (javascript)