How I Automated 38% of My Job as a Content Marketer
Eliminating tedious tasks with basic programming skills
When you’re a content marketer, you’re always expected to do more. But anyone who faces enough requests for more soon realizes that you can only do so much.
You have it in you to do amazing work, no matter what people throw at you.
The challenge is that there’s never enough time to maintain all the initiatives you’ve added to your content marketing program.
Accepting new initiatives comes with the territory, but I recently discovered a solution to the lack of time. Taking an introductory programming class, my eyes were opened to an application of what I was learning in my job as a content manager: Automation.
Is Automation Possible for a Content Marketer?
When you have too many content initiatives running and not enough time to maintain them, automation can help. It won’t be the silver bullet to solve all your problems, but at least for me, automation has helped keep initiatives going that would otherwise have taken a long time or just fallen by the wayside.
You won’t be able to automate everything, but you should be able to automate the tedious, regular tasks that a computer could do for you.
Programming -> Automation
Programming is essentially about plugging inputs into functions that manipulate those inputs and perform actions. For content marketers, that means identifying repeatable tasks where you can provide some inputs, give the program some instructions, and then let it carry out the task for you.
This is exactly what I’ve done for my own tasks and I’ve had great success.
Now, regarding that big percentage in the headline of this piece—the glaring 38% that made you click through. To calculate it, I added up the time it would take me to perform:
- Urgent activities that I have to do to keep the content wheels turning.
- Important activities that would often fall by the wayside due to lack of time.
My calculated percentage assumes that during my 160 hours/month of work I would manually do both the urgent and important activities. Without automation, I didn’t always get to the latter.
Through automation you can address important tasks that usually you wouldn’t get to, improving your value as a content marketer.
I have listed some of the activities that I have automated below. If you have questions, leave a comment or see my contact information at the bottom.
Disclaimer: If you’re an experienced programmer, you might look at some of my code samples and think that I’m an amateur programmer. You got me! If you have some feedback, I’d love to see it in the comments!
Automated Content Audit
Environment: Google Apps Script (Sheets)
If you’ve ever been involved with publishing or maintaining a library of content, you know there are lots of boxes you need to check off to ensure everything’s properly set up. Things will often go awry with content due to human error, miscommunication across teams, and inexperienced employees. In which case, you’ve probably had to perform a content audit.
Some reasons you might do a content audit:
- You recently migrated to a new content management system.
- You need to adjust your company’s messaging or product naming.
- You need to make site-wide improvements for SEO.
When we migrated over to a new CMS (Uberflip), I realized that I needed to audit the content to verify everything was in place. I went about my first audit manually—which took forever!
To make matters worse, some of our content standards changed soon after. These were my options:
- Leave the older content as it was and apply the new standards going forward.
- Find a way to conduct the audit faster (I chose this option).
Before I show you the code, here’s how the content audit works:
- I make an API request to our CMS (Uberflip) to give me the data for all items of content.
- I go through the data for each item performing various tests against that data, returning any failed test.
- I output the results for each item that had at least one failed test into a Google Sheet.
Some of the items I check for in the audit include:
- The length of the meta-description (is it too long or too short?).
- The length of the title (is it too long or too short?).
- Whether blog posts have sufficient link density (above 1%).
- Whether the content is more than two years old.
- Whether blog posts start with an image.
The primary benefits of this automated content audit have been:
- Maintenance. As we add new content to our library, I can quickly run this audit to verify that the new asset meets our quality standards.
- Extensibility. The way I wrote the program makes it possible to add new tests, so as our content standards change, I can easily add new tests and run them in minutes instead of hours or even days.
Time Saved: If I manually carried out a full audit each month (not unrealistic because we add a new audit rule about once per month), it would take me about two minutes per asset for around 350 assets — so about 12 hours. Now I can do the same audit in 10 minutes.
Below is a partial snippet of the code. I removed the query of the Uberflip API as well as the code that adds the results of the audit to the sheet. What’s left is the actual testing of the content and its characteristics.
Note: This code is not a matter of copy-paste. It is merely instructive to show you how you might approach this process of automating a content audit.
Environment: Google Apps Script (Sheets)
Integrations: Uberflip, Wrike, Google Analytics, Salesforce
Recently the VP of Marketing asked us to start sending out an internal newsletter about some of our recent or upcoming marketing initiatives — new content, recent email sends, upcoming email sends, upcoming events, and more. This was an initiative we had implemented earlier. It was important, but it was not urgent — so it had fallen by the wayside.
To get this newsletter up and running again, I worked with a couple of team members to determine where to get the relevant data from and how best to format it for an email.
Here’s the basic process we came up with.
Each week, the person responsible for sending the newsletter would see a recurring task in our project management system (
Wrike) telling him to send the newsletter. He would go to the designated Google Sheet and click the
Generate button, which would run a program to:
- Set the date of the marketing newsletter (to be used in the newsletter copy).
- Pull the dates and names for all upcoming email sends and events from Wrike.
- Pull the names and URLs of our most recent pieces of content from Uberflip.
- Pull the names and URLs of our most-read pieces of content from Google Analytics.
He would then use the Salesforce Plugin on the Google Sheet to update a custom report of marketing leads that lives in its own sheet. The sheet then automatically calculates the number of leads in the preceding week using the
Next, he would then fill in the blanks with filler copy about the previous week’s email send and the upcoming email send.
Google Sheets then automatically pulls all the data into another sheet that, using formulas, adds the content into an HTML email template that the person who sends the email can just copy and paste. That’s it!
Gathering the data and inputting it to the sheet would take me about an hour every week. Now it takes about 10 minutes.
I won’t show the
Uberflip functions because they are very platform-specific and won’t offer much utility here. I will, however, show the code for making the Google Analytics query for the most popular pieces of content.
Content Pipeline Dashboard
Environment/Framework: Vue.js with an Nginx server
A content pipeline is a visualization of all your content projects and their stage of development.
This dashboard was a big project, but well worth our time. We created it for two reasons:
- To keep track of our own projects. When you’re handling dozens of projects at a time, they can be tough to keep track of.
- To visually express the volume of the projects we were working on to managers. As I alluded to in the introduction, content marketers are well acquainted with the expectation to always do more. My manager, the director of content and communications, keenly felt this challenge and didn’t have any good way to show the VP of marketing everything we had on our plate.
Before we built this project, we tried to work out whether it was possible to build it directly in our project management system — because if we could, why waste the time? Unfortunately we couldn’t, so we resorted to writing the custom code to build it out. Some of the features of the dashboard include:
- Drag-and-drop functionality to move projects from one phase to the next and prioritize tasks within a phase.
- A calculation of estimated time to completion (ETA). This is based on the workload of the owners of all tasks in the project — what else do they have on their plate, above and ahead of this project?
- A calculation of how many projects are in the pipeline and how long they’re expected to take.
- An avatar indicating the primary owner of a project.
Time Saved: Ignoring how long it would take me to calculate time to completion for each project each day (which is probably not even possible), this dashboard probably saves me about an hour a day. I currently spend roughly 20 hours a month reviewing the status of current projects in the pipeline.
Because this project is not working in Google Sheets but is hosted on an AWS server, deploying it is a little more involved. I’d love to talk you through it if you’re interested.
I built the dashboard to work with Wrike’s API and project structure, but you could adapt it to work with other systems. You can view the open-source code in Github.
Skills Development (with Hey Fred)
Integrations: Twilio API (for text-messaging)
A key element of becoming a better content marketer is sharpening the ax. Skills development should be an activity you engage in regularly.
This is an interesting project because I developed it outside of work time but have used it extensively in the work environment.
As I explain in one of my other posts, one of the greatest challenges to learning is remembering. The greatest challenge to remembering is reviewing. And the greatest challenge to reviewing is storage and retrieval of information.
When we read articles, attend seminars, watch webinars, or consume any other sort of educational material, the information often goes in one ear and out the other. We may take notes, but notes should only be used as temporary storage for reviewing information then incorporated into long-term memory. What good is information on paper? You need it in your head!
Unfortunately, taking the time to pull out your notes and review them frequently enough to internalize the information is difficult. What if instead your notes came to you?
This is the concept behind a prototype I built to help with learning retention and skills development. A text-based app where you send information to a phone number linked to a server that stores that information. The server then sends the information back to you on a periodic basis. Gradually it sends it less and less frequently, with the idea that eventually you have internalized it.
This learning tool isn’t something you necessarily need to build — I have built it and it’s available for anyone to use. You can read more about this prototype (I endearingly call him Fred) in technique three of this other Medium post.
Time Saved: Fred has probably saved me about 15 minutes per day (5 hours a month) by bringing information directly to me instead of making me hunt it down to review and remember.
Adding Blog Posts to Google Analytics Audiences for Remarketing Campaigns
Blog posts serve a very top-of-funnel role. They don’t convert much traffic, but they’re great for bringing visitors in through organic channels. A great way to move people down-funnel from blog posts is through remarketing.
I won’t go into the details or strategy of remarketing too much here. Suffice it to say that in Google Analytics you can segment visitors by the pages they visit, then export that segment as an audience into Google Ads for further advertising.
For example, we might create a segment for all visitors to blog posts about the topic of web analytics within the last 30 days, and then advertise an upcoming webinar about web analytics to that group. This helps reengage the visitor and move them down-funnel. Here’s what that audience looks like in Google Analytics:
Historically, after our content writer published a new blog post, I would go into Google Analytics and add the new blog post to one of the segments. The effort was minimal — but it was tedious and repeatable, so prime for automation.
I determined to combine this step in the publication process with a previous one, in which the content writer would record the publication of the blog post in an ongoing catalog of all blog posts on our site.
The new process looks like this:
- The writer adds the date, title, and URL path of the new post.
- The writer then selects the audience name from a dropdown (freshly populated from the Google Analytics audiences each time the writer opens the Google Sheet).
- The automation scripts automatically add the new condition to the selected audience.
In addition, I set up the automation script to allow for changes. If the writer changes the URL path, the old path is kept and the new path is added to the existing audience. If the audience changes the audience in the dropdown, the URL path is removed from the previous audience and added to the new one.
Time Saved: I mainly created this automated script because I was about to freshly assign all blog posts to an audience, which saved me a significant amount of time. Now I save roughly 15 minutes a week, so about an hour every month.
To prepopulate the dropdown
I use the data validation feature for the dropdowns and simply reference an entire column. The function called
addBlogAudiencesToDropdowns() runs every time the Google Sheet opens. Here’s the code:
To add or remove URI conditions from audiences
In order for this function to work, I set a trigger in the Google Apps Script to call the
changeAdAudience() function whenever the spreadsheet changed, passing in the change as the first parameter:
Other Projects and Time Savings
There are several other tasks I’ve been able to successfully automate, creating additional time savings for me so I can focus more on improving my skills and creating new initiatives. Here’s a quick breakdown of the time savings from those other projects:
- Automated reporting to sales on visits by prospects to their curated content: 6 hours/month.
- Twice-monthly report of email performance for content sends: 1 hours/month.
- An automated script that tests whether forms are visible for all pieces of content that should be gated: 12 hours/month.
Again, I want to highlight that if I didn’t have automation, I wouldn’t take the time to do some of these activities (like the last one). I would just assume the risk of something being wrong because I need to keep other programs moving forward. With automation, I no longer have to make that choice.
Here’s a final calculation of how I came to the percentage in the title:
- Time saved through automation: 61 hours/month
- Total time spent working: 140 hours/month
- Percentage of time saved: 38.13%
Final Thoughts On Automation
Hopefully, the examples above have given you a taste of how automation can dramatically increase your efficiency and give you back time to work on more impactful, exciting projects.
As you evaluate your next steps towards automation, consider the following.
When should you automate?
If you can answer “Yes” to the following two questions on the process in question, then you should probably automate it.
- Are you doing this process more than once?
- Could a computer do this process better than you?
Another important aspect to consider is whether it’s even possible to automate. Some APIs have limitations that make it impossible for you to automate certain tasks. Do your homework before you start programming, so you don’t hit the end of the program and realize that the last API endpoint you needed in order to complete the project doesn’t exist (I’ve definitely done that!).
You will fail
I came across this meme not too long ago. As a content marketer who poses as a programmer, I think the message here is more true for me than anyone else:
As you get started in your programming journey, you will experience both these states. Mostly the second. If you don’t feel like you have the patience (or buy-in from your boss) to spend the hard hours figuring out why commas and quotes can ruin your code, then automation might not be right for you, which leads to the next thought.
Process automation is not for everyone
This route is not for everyone. I’m writing this post from my perspective. You might look at the above code examples and want to vomit! But if you’re curious about new technology and love the more creative aspects of your job (whether that means writing content or writing code), then this route could open new doors for you.
There are skills that carry over from content marketing
Surprisingly, I found that there were certain skills as a content creator that migrated over to programming. Specifically:
- Proofreading. Having an eye for rogue punctuation, letters, and capitalization will save you many a headache while programming.
- Storytelling. A good program tells a story. Ideally, someone with at least some background in your programming language will be able to look at your program and read it like a book. Use your storytelling ability to your advantage.
Keep your code clean
Keeping code clean is as much for your own benefit as for anyone you share your code with.
- Use appropriate conventions. Make sure to use proper indentation, spacing, and other conventions to ensure your code is readable.
- Make your function and variable names clear. Don’t waste time trying to remember what x refers to.
- Keep your functions short. A short function that does one thing is much easier to understand than one that does 20. This takes practice — I’m still learning to make functions do just one thing.
Document like crazy
There are three main reasons you should document:
- You won’t be around forever, and you don’t want all your hard work to go to waste when you leave.
- You don’t want to maintain your code forever. If you’re hoping for some upward mobility, you’ll want to make sure someone else can read your documentation and pick up the baton.
- You will forget. Humans are forgetful. You will forget what your code does, so document well.
Be someone’s hero
If you can automate tasks for yourself, you will be a great employee. If you can automate tasks for someone else, you will be a hero. As you develop new skills, try and find ways to make someone else’s workload lighter.
Hopefully, after reading this post you feel inspired instead of overwhelmed. This is probably new territory for you, but I know that if you take the time to learn, you can learn. Programming is not reserved for only a few. Every job can be made better through some basic programming skills.
I want to hear how you feel about automation. Comment below if you want to talk more about this topic.