Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkedIn Schedule Send

Write the message now. Send it when it will actually get read.

A Chrome extension that adds a schedule button to LinkedIn's message composer.

How it works


Why this exists

Job hunting happens on nights and weekends. That is when you have time to research a company, find the right hiring manager, and write something that isn't generic.

But Saturday 11pm is a terrible moment for that message to land. It sits at the top of someone's inbox all weekend, gets buried under Monday's flood, and reads a little like you have nothing else going on.

The obvious fix is to write it now and send it Tuesday at 9am. LinkedIn does not let you do that.

What makes this particularly annoying: LinkedIn already built message scheduling. It ships in Recruiter and Recruiter Lite — the paid products recruiters use. Recruiters can time their outreach to your inbox. You cannot time yours to theirs.

So the feature exists. It is just pointed in one direction.

This extension points it the other way.

A note on the history, since it gets repeated a lot: LinkedIn added scheduled posts in 2022 and that still works. Scheduled messages in regular LinkedIn messaging were, as far as I can find, never a thing — if you remember using it, it was probably Recruiter or a third-party tool. Happy to be corrected with a source.


What it does

  1. Write your message in LinkedIn as you normally would.
  2. Click the clock icon next to Send.
  3. Pick a time — or hit Tomorrow 9:15am / Monday 9:15am.
  4. Close the tab. Forget about it.

At the scheduled time the extension quietly opens the conversation in a background tab, types your message, sends it, closes the tab, and tells you it went out.

Click the toolbar icon to see everything queued, reschedule it, send it early, or cancel it.


Install

Not on the Chrome Web Store — it automates LinkedIn, which Web Store policy does not allow. Load it unpacked, which takes about a minute.

  1. Download this repo: green Code button → Download ZIP → unzip it. (Or git clone https://github.com/chloe4ai/linkedin-schedule-send.git)
  2. Put the folder somewhere permanent — Chrome reads it from disk on every launch, so if you move or delete it, the extension breaks.
  3. Go to chrome://extensions.
  4. Turn on Developer mode (top right).
  5. Click Load unpacked and select the folder — the one containing manifest.json, not its parent.
  6. Refresh any LinkedIn tab you already had open.

The clock icon appears next to Send. It can take a second or two after page load.


How it works

Roughly 800 lines, no dependencies, no build step, no server. Nothing leaves your machine.

content.js     Injects the button, reads and writes the composer, performs the send
background.js  Service worker: the queue, chrome.alarms, tab orchestration, recovery
popup.html/js  Manage what's queued

Three parts of this were more interesting than expected:

Typing into LinkedIn's composer. It is a framework-controlled contenteditable, so assigning textContent does nothing — the Send button stays disabled because the framework never sees an input event. The fix is document.execCommand('insertText'), which generates real events the same way a keystroke does.

Surviving LinkedIn's DOM. Class names are build-generated and change without warning. Every lookup tries several strategies in order of durability: ARIA roles first, then semantic classes, then structure. A LinkedIn redesign can still break it, but it degrades loudly — the button fails to appear, or the send fails and notifies you. It will not silently send the wrong thing: the text is verified in the composer before sending, and the composer is verified empty after.

Closed laptops. chrome.alarms does not fire while Chrome is closed, which would make "schedule and forget" a lie. So every wake-up also sweeps for overdue messages and sends them late rather than dropping them, within a catch-up window you control (default 24 hours). Miss the window and it notifies you instead of sending something stale.


Limitations, stated plainly

Chrome must be running when the timer fires. This is the fundamental constraint of doing this as an extension and there is no way around it. The catch-up window softens it — worst case is a late send, not a silent miss — but if a message is genuinely time-critical, be at your computer.

A LinkedIn redesign will eventually break it. The selectors are defensive, not bulletproof. If the button vanishes, open an issue with your Chrome and LinkedIn locale and it is usually a ten-minute fix.

One message per conversation at a time. No sequences, no drip campaigns, no bulk anything. That is a deliberate scope choice, not a missing feature — see below.


About LinkedIn's terms

LinkedIn's User Agreement prohibits automating account activity. This extension automates account activity. That is worth understanding before you install it.

Some context on what that means in practice. This drives your own already-logged-in Chrome session — no API, no scraping, no headless browser, no credentials stored anywhere. To LinkedIn's systems it is close to indistinguishable from you clicking Send yourself, which puts it in a very different risk class from cloud tools that log into your account from a datacenter IP.

Close to indistinguishable is not identical. The realistic downside is an account restriction, and if you are mid-job-search that is expensive.

Which is why this deliberately does not do bulk. Volume and velocity are what LinkedIn's detection actually keys on — twenty messages an hour on a schedule looks nothing like a person, while three carefully written messages moved from Saturday night to Tuesday morning looks exactly like one. Time-shifting a handful of real messages is the use case. Automated outreach at scale is not, and there are plenty of other tools for that if it is what you want.

The extension also bails out rather than pushing through: before sending, it checks for CAPTCHAs, security checkpoints, logged-out sessions, and restriction banners, and stops and notifies you if it finds one.

Use your own judgment. It is your account.


Contributing

Issues and PRs welcome. Selector breakage reports are especially useful — include your Chrome version, LinkedIn interface language, and a screenshot of the composer.

License

MIT — see LICENSE.

About

Chrome extension that adds a Schedule Send button to LinkedIn's message composer. Write on the weekend, send on a weekday — when it will actually get read.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages