Getting marketing approvals without bottlenecks
The hardest part is not writing the campaign copy or designing the email, it is waiting around for someone to say yes. The first time I set up an email campaign inside HubSpot, I assumed there would be a big green button that said “request approval.” Nope. Instead I ended up sending a Slack message with screenshots pasted in, then a Google Doc link, then an Asana task, all for the same content. Half the team looked at the Doc, one person gave feedback directly in Slack (which disappeared after a day), and someone else edited the draft inside HubSpot itself, so nothing matched. When I tried to schedule the campaign, I realized three different versions of the subject line existed, and I honestly could not tell which one was the “approved” one.
The simplest first step was creating a shared folder just for approvable drafts. I renamed everything with the same format, like “Q2 Newsletter Draft” instead of just “newsletter-final-v2.” It sounds boring, but that one naming tweak stopped about 80 percent of the confusion. No one had to guess which tab to open anymore :). Later I switched from copying links around to using task assignments directly. For example, in Asana I created a custom status called “Needs Approval” so people couldn’t just leave vague thumbs-ups in threads. They had to physically move the task to the “Approved” stage. Clicking that stage meant the content was legitimately good to go instead of half-approved in chat messages.
Adding automation to move approvals faster
Once the manual steps settled down, I tried wiring it together with Zapier. I already had too many half-built zaps sitting open, but I found a useful one where every time I dropped a campaign draft into the “Needs Approval” list, Zapier emailed the right manager with a formatted preview link. The bug, though, was that Zapier also sent old drafts if I renamed them. For some reason, renaming a file made it look brand new to Zapier. That meant someone got two or even three emails for the same campaign. There is no faster way to make someone ignore notifications than that. ¯\\_(ツ)_/¯
The workaround was to add a filter step inside the zap. Instead of triggering on “new file in folder,” I triggered on “new file with custom property tag.” I added a little checkbox property in Google Drive called “Ready to Review.” Only when I checked that did the zap run. Suddenly no more duplicate emails. It took me way too long to figure that out, and I had a bunch of abandoned zaps with names like “Approval V3 Test pls ignore” cluttering my dashboard. But now, even if my naming scheme slips, at least only intentional drafts trigger notifications.
Keeping track of who said what
One problem that official tools never solve is how to see all the feedback in one place. Comments were showing up in so many different apps that half my energy went into copy-pasting them into one spot. I tested Notion as a central board where each campaign was a card. Inside each card, I dumped the Asana comments, any Slack reactions, and even the edits suggested in Google Docs. It looked messy, but at least messy in one window instead of ten. The biggest win was creating a table with columns like “Owner,” “Last Feedback,” and “Final Decision.” For each draft I could literally scan down the table to see if the VP already approved or if it was still waiting. The idea of a “single source of truth” finally made sense here.
Sometimes people resisted because they wanted to keep commenting in whatever app they were used to. I stopped fighting it. Instead of saying “please use Notion,” I just copied their comment into Notion myself and tagged them inside. Slowly they realized it was easier to reply there since the thread was already built. It is not elegant, but it works.
Handling last minute legal reviews
This is the part that always broke me. You finish your copy, design, targeting, everything, and just when you think it is safe, legal swoops in with redlines. Half the time they only emailed edits in PDF format, which is almost impossible to patch back into the live draft cleanly. I actually built a side workflow in Google Docs where I pasted the campaign into a document just for legal, because Docs has a “suggesting” mode. That way their comments showed as suggested changes rather than a full rewrite in PDF. Then once they approved it in the doc, I mirrored those edits back to HubSpot by hand.
It feels clunky, but the beautiful thing is that everyone could see the change history. If legal suddenly said “we never approved that,” I could open the doc revision log and show the exact moment they clicked “accept suggestion.” 😛
Building a realistic approval timeline
Theoretically, approvals are supposed to be quick. In reality, things stretch. One of the best hacks I discovered was setting fake deadlines in my project manager. For instance, if I needed final approval by Friday, I put the deadline as Wednesday in the task. That two day buffer saved me so many times because people always came in late. It also gave me time for corrections without killing the send date. What is funny is that once I did this, some approvers assumed the Wednesday date was real and actually moved faster than usual. So ironically, lying about the deadline made the process more honest in practice.
When nothing seems to sync correctly
Every now and then, no matter how polished I thought my workflow was, something broke. One week the Zapier notifications just stopped firing, and I had no idea until I missed an approval. I checked the zap history and half the runs said “stopped by filter,” even though the condition was clearly met. I re-saved the exact same zap with no edits, and suddenly it worked again. Another time an Asana custom field vanished from the API, so the trigger could not find it. I had to recreate the field, which meant reconnecting every zap that used it. By the end of the afternoon, I had way too many duplicate fields named things like “Needs Approval Copy2.” Nothing official warned me about this, it just happened randomly.
I learned to keep a very small approval test task around. Every time I dared to touch a zap, I ran the test task immediately. If the notification showed up, I knew it was working. If not, I knew to fix it before launching a real campaign. It is like carrying a spare key in your pocket. You do not think you will need it, but then you do.
Reducing bottlenecks with clear rules
In the end the single biggest fix was not the tools at all, it was the rules. I wrote a document no longer than one page that said clearly: marketing drafts live in one folder, approvals are given by moving the task to approved, and legal feedback must happen in docs not PDFs. Anyone joining the team just had to read that page. Since then the arguments about which version was the right one decreased a lot.
If you want to see what platforms like Zapier or Asana actually offer, their main sites are easy to reach, such as zapier.com and asana.com, but honestly no platform really solves the human side perfectly
What finally felt sustainable
After so many tries, I ended up with a flow where drafts start in the shared folder, tasks move through approval states in Asana, Zapier notifies the right people only when a draft is tagged “Ready to Review,” and legal uses Docs for their changes. It still breaks sometimes, but at least when it breaks, I know what part to check first instead of panic refreshing six different places. The chaos is smaller now, which feels like progress in its own right, even if I still forget to close half my tabs.