No Code, No Problem: How I Used Plex Webhooks & Zapier to Share My Movies
/Getting to this result took me days.
Have you ever had a random idea that turned into a full-blown problem-solving adventure? That’s exactly what happened to me when I thought, "Wouldn’t it be great if I could automatically post the movie I’m currently watching to social media?"
I wanted to engage with the movie community on Bluesky and Threads without manually typing out every post. But here’s the catch—I had no coding experience, and I had no idea how to use webhooks.
This is the story of how I figured it out with Plex Webhooks, Zapier, and The Movie Database (TMDb) API—all without writing a single line of code.
Automating Movie Posts: The Initial Concept
Like most great ideas, this one started with pure curiosity. I knew that Plex, the media server I use to watch my movie collection, had some kind of webhook functionality, and I knew that Zapier could automate tasks between different services.
But could I actually connect Plex to Zapier in a way that would let me automatically post what I’m watching?
I had no clue. But I was going to find out.
Overcoming Automation Hurdles: Webhooks, Zapier, and API Integration
This project quickly turned into a puzzle with multiple pieces.
- Understanding Webhooks: I had never used them before, so I had to learn what they were and how they worked.
- Figuring Out Zapier’s Webhook Handling: I had experience with Zapier, but I had never tried setting up webhooks.
- Getting the Right Data from Plex: Plex sends multiple webhook events (play, pause, stop, resume). I only wanted to post when I first started a movie, not every time I hit pause.
- Using The Movie Database (TMDb) API: I had used TMDb in a Siri Shortcut before, but it had been a long time. I needed to figure out how to pull movie posters and additional details into my posts.
Initially, I thought I’d need JavaScript and complex API calls. I tried several different approaches, some of which didn’t work. But in the end, I didn’t need any code at all—just the right combination of Zapier steps.
Step-by-Step Guide: Integrating Plex Webhooks with Zapier for Automated Social Media Posts
Step 1: Setting Up the Plex Webhook
Plex has a built-in webhook system, which means it can send data whenever something happens, like playing a movie. To set it up:
- Go to Plex Settings and navigate to Account → Webhooks.
- Add a New Webhook. Plex will ask for a URL to send data to. I copied a Zapier Webhook URL.
- Save and Test. I started playing a movie and checked if Plex sent data to Zapier.
This is what the final zap looks like
Step 2: Creating a Zapier Zap to Catch the Webhook
- Trigger: "Webhooks by Zapier"
- Event: "Catch Hook"
- This step listens for incoming data from Plex.
Step 3: Using TMDb to Get Movie Posters
Plex sends basic movie details, but I wanted to add a high-quality movie poster to my post. I already have an API key from The Movie Database that I've used for years in a Siri Shortcut. I had Chat GPT write me some Javascript that uses that API to search for the movie I'm watching and pull the poster image from The Movie Database API.
API Request URL
https://api.themoviedb.org/3/movie/?api_key=YOUR_TMDB_API_KEY
Returned Data
title: The movie’s name
release_date: Release year
poster_path: URL for the movie poster
Step 4: Setting up a filter in Zapier for Plex media.play events
One major problem I encountered was that Plex fires multiple webhook events whenever I pause, resume, or stop a movie. This caused my Zap to post repeatedly for the same movie, which I didn’t want. This took me a couple days to figure out. I kept trying to figure out how to solve the problem from my current vantage point.
A good night's sleep proved to be the cure. I realized I never looked for a media.play payload. Once I found that, the end came into focus.
The solution? A simple Zapier Filter step.
Add a "Filter by Zapier" Step. I set up a filter to check the Payload Event value from Plex.
Set the Condition: Payload Event (Text) Exactly Matches "media.play"
Why This Works
Plex sends webhooks for media.play, media.pause, media.resume, and media.stop.
By filtering only for "media.play", I ensured that my Zap only triggers once per movie session, when playback first starts.
Now, pausing and resuming doesn’t create duplicate posts—only the initial play event is processed.
With this fix, I no longer needed complex timestamp logic or storage-based tracking. A simple filter was all it took.
Step 5: Formatting the Final Post
To keep my posts consistent and engaging, I used Formatter by Zapier. Text Formatting Step:
- 🎥 {{Payload Metadata Title}}
- 🏷️ {{Payload Metadata Tagline}}
- 🎬 {{Payload Metadata Director Tag}}
- 📝 {{Payload Metadata Writer Tag}}
- 📆 {{Payload Metadata Year}}
Hashtag Storage:
I created a Storage by Zapier key for custom hashtags. This lets me update them anytime without editing the Zap. As of the time of this post, there's a small issue with how the hashtags appear on BlueSky, but I'm optimistic I can work through that small issue.
Step 6: Posting to Bluesky & Threads
Finally, I connected Bluesky & Threads as action steps in Zapier. Each post:
- Includes the movie title, year release, director, writer and the tagline of the film.
- Attaches a TMDb movie poster
- Adds dynamic hashtags
- Only posts ONCE per viewing session
The Final Result
Now, every time I start a movie on Plex, my Zap automatically posts a formatted update to Bluesky and Threads—without me having to do anything.
I don’t have to remember to post, I don’t have to type anything manually, and I’ve created a simple automation that works in the background.
What I Learned From This Project
- Webhooks Aren’t as Scary as They Seem
- Once I figured out how they work, they became an amazing automation tool.
- Zapier Can Do Way More Than I Expected
- Between Filters, Formatter, and Storage, I didn’t need any actual code.
- Sometimes the Best Solution Is the Simplest One
- I went through multiple failed approaches before realizing Plex Webhooks already had what I needed.
Final Thoughts
This was a fun project that started with a random idea and turned into a fully automated system.
Now, I can focus on watching movies while my Zap takes care of the rest. No code, no problem!
Have you automated anything cool with Plex or Zapier? Let me know in the comments!
Troubleshooting and Advanced Tips
How to prevent duplicate social media posts from Plex webhooks:
One of the most common issues users encounter is duplicate posts due to Plex sending multiple webhook events. To prevent this, use Zapier's 'Filter by Zapier' step. Set the filter condition to 'Payload Event (Text) Exactly Matches "media.play"'. This ensures that the Zap only triggers when a movie first starts playing, preventing duplicate posts from pause, resume, or stop events.
Troubleshooting Plex webhook not triggering Zapier:
If your Plex webhook isn't triggering your Zap, first, double-check that you've correctly copied the Zapier Webhook URL into your Plex settings. Then, test the connection by playing a movie on Plex. If the Zapier trigger still doesn't activate, verify that your Plex server has internet access and that there are no firewall restrictions blocking the webhook requests.
How to get movie posters from TMDb API using Zapier without code:
To get movie posters, utilize Zapier's 'Webhooks by Zapier' to make an API call to TMDb. In the action step, configure the API request URL using the movie title from the Plex webhook data. Then, parse the API response to extract the 'poster_path' URL. Finally, use this URL to attach the movie poster to your social media posts.
Setting up a filter in Zapier for Plex media.play events:
Within your Zap, add a 'Filter by Zapier' step after the 'Webhooks by Zapier' trigger. In the filter setup, select the 'Payload Event' field from the Plex webhook data. Set the condition to 'Text Exactly Matches' and enter 'media.play'. This will ensure that only events with the 'media.play' payload are processed by the Zap.
Using Storage by Zapier for dynamic hashtags in social media automation:
To use dynamic hashtags, create a 'Storage by Zapier' key to store your hashtag list. In your Zap, use the 'Storage by Zapier' action to retrieve the hashtags. Then, use Zapier's 'Formatter by Zapier' to format the hashtags for your social media posts. This allows you to update your hashtags without editing the Zap itself.