<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amrita Labs</title>
    <description>The latest articles on DEV Community by Amrita Labs (@amrita-labs).</description>
    <link>https://dev.to/amrita-labs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1709008%2Ff136279e-81bc-4d52-ad35-1865b804eaf2.png</url>
      <title>DEV Community: Amrita Labs</title>
      <link>https://dev.to/amrita-labs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amrita-labs"/>
    <language>en</language>
    <item>
      <title>How to Tell If Your Pinterest Pin Will Perform (Before You Post)</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/how-to-tell-if-your-pinterest-pin-will-perform-before-you-post-1fdn</link>
      <guid>https://dev.to/amrita-labs/how-to-tell-if-your-pinterest-pin-will-perform-before-you-post-1fdn</guid>
      <description>&lt;p&gt;Some Pinterest pins feel dead on arrival.&lt;/p&gt;

&lt;p&gt;You post them, maybe give them a day, and it is obvious they are not going anywhere. Then another pin — sometimes one you spent less time on — keeps getting impressions, saves, and clicks for weeks. That used to feel random to me. The more pins I watched, the less random it looked.&lt;/p&gt;

&lt;p&gt;A lot of the difference shows up before the pin is even published. Pinterest gets an immediate set of signals from the image, the board, the title, the description, and then the first wave of engagement. If those signals are weak, the pin rarely gets much room to recover.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/kmelegdnljikegoemigfgnpcbllmkije" rel="noopener noreferrer"&gt;Pinello&lt;/a&gt; is a free Chrome extension that scores Pinterest pins across 5 dimensions — image, board fit, title, description, and keywords — in real time, directly on pinterest.com.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" alt="Pinterest pin scoring checklist — 5 dimensions to check before posting" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the pre-publish check I use when I want a pin to have a better shot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first 24 hours matter more than people think
&lt;/h2&gt;

&lt;p&gt;Pinterest is not purely chronological, but early signals still matter.&lt;/p&gt;

&lt;p&gt;If a pin gets a decent first impression — people stop, save, or click — Pinterest has a reason to keep showing it. If the pin looks confusing, mismatched, or under-optimized, it often stalls before it gets that chance.&lt;/p&gt;

&lt;p&gt;That is why I care so much about the stuff that is fixable &lt;em&gt;before&lt;/em&gt; I post.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 signals I look at before posting a pin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Will the image stop the scroll?
&lt;/h3&gt;

&lt;p&gt;Before I think about keywords, I do the thumbnail test.&lt;/p&gt;

&lt;p&gt;Pinterest is visual, and the image gets judged fast. I usually stick to &lt;strong&gt;2:3 vertical format (1000×1500px)&lt;/strong&gt; because it fills the feed cleanly without weird cropping. Then I ask a few blunt questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the pin readable on a phone?&lt;/li&gt;
&lt;li&gt;Is there one clear focal point?&lt;/li&gt;
&lt;li&gt;Does the text overlay help, or is it fighting the image?&lt;/li&gt;
&lt;li&gt;Does the topic make sense in a second or less?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the thumbnail looks muddy or crowded, the rest of the pin has to work too hard.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Does the board make the topic obvious?
&lt;/h3&gt;

&lt;p&gt;The board is not just a folder. It is context.&lt;/p&gt;

&lt;p&gt;A pin about weeknight recipes belongs on a board that sounds like weeknight recipes, not a vague catch-all board with a cute name. The stronger the board context, the easier it is for Pinterest to understand what audience the pin belongs with.&lt;/p&gt;

&lt;p&gt;I want the board to do three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use a searchable topic phrase&lt;/li&gt;
&lt;li&gt;already contain enough related pins to feel coherent&lt;/li&gt;
&lt;li&gt;make the new pin feel obviously on-theme&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I save a great pin to a lazy board, I usually regret it later.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Does the title carry the keyword early enough?
&lt;/h3&gt;

&lt;p&gt;A good Pinterest title does not need to be fancy. It needs to be legible, specific, and front-loaded.&lt;/p&gt;

&lt;p&gt;Only part of the title gets real attention in the feed, especially on mobile, so I try to get the key phrase near the front. Titles like these do a clearer job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Minimalist Bedroom Ideas for Small Spaces"&lt;/li&gt;
&lt;li&gt;"25 Modern Bathroom Ideas Under $500"&lt;/li&gt;
&lt;li&gt;"2026 Wedding Color Trends"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I avoid are titles that waste the opening on filler: "Check this out," "I love this," "Great tips," and so on. They may sound friendly, but they do not help Pinterest or the reader understand the pin.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Does the description give Pinterest enough context?
&lt;/h3&gt;

&lt;p&gt;This is where a lot of pins quietly underperform.&lt;/p&gt;

&lt;p&gt;If the description is blank, Pinterest has less text to work with. If the description is robotic, it feels stuffed. I want something in the middle: enough context to reinforce the topic, but still readable.&lt;/p&gt;

&lt;p&gt;Usually that means &lt;strong&gt;100-300 characters&lt;/strong&gt; and 2-3 natural sentences.&lt;/p&gt;

&lt;p&gt;I also do not waste space on hashtag stuffing here. On Pinterest, that space is better spent on plain-language keywords that actually describe the pin.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Easy 30-minute chicken stir fry recipe with vegetables. A simple weeknight dinner idea for busy families who still want something healthy. Save this for your next meal prep day."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That does not try too hard. It just tells Pinterest, and the reader, what the pin is for.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Am I giving the pin a decent first-day chance?
&lt;/h3&gt;

&lt;p&gt;This is the signal people skip because it feels less tangible.&lt;/p&gt;

&lt;p&gt;The first 24 hours still matter. Saves are strong. Clicks help. Even just stopping the scroll matters more than a pin getting tossed into the void at a random time.&lt;/p&gt;

&lt;p&gt;So before I post, I try to think about distribution too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am I posting when my audience is actually around?&lt;/li&gt;
&lt;li&gt;Is this going to the most relevant board first?&lt;/li&gt;
&lt;li&gt;Do I have a reason to expect early saves or clicks?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not obsess over timing hacks, but I do not pretend timing is irrelevant either.&lt;/p&gt;

&lt;h2&gt;
  
  
  My pre-publish Pinterest pin checklist
&lt;/h2&gt;

&lt;p&gt;Before every pin, I run through this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;✅ Ready to post&lt;/th&gt;
&lt;th&gt;❌ Fix first&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;td&gt;2:3 ratio, bright, readable at thumbnail&lt;/td&gt;
&lt;td&gt;Square/landscape, dark, tiny text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Board&lt;/td&gt;
&lt;td&gt;Keyword title, 10+ pins, topically matched&lt;/td&gt;
&lt;td&gt;Creative name, empty, random mix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;Keyword in first 40 chars, specific&lt;/td&gt;
&lt;td&gt;Vague, starts with filler words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;100-300 chars, 2-3 keywords, CTA&lt;/td&gt;
&lt;td&gt;Empty, one sentence, hashtag spam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timing&lt;/td&gt;
&lt;td&gt;Peak hours for your audience&lt;/td&gt;
&lt;td&gt;Random time, no thought to scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If even one row feels weak, I usually fix it. That is much easier than trying to diagnose a flop afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I automate now
&lt;/h2&gt;

&lt;p&gt;You can absolutely do this checklist manually. I still do, sometimes.&lt;/p&gt;

&lt;p&gt;But if you are publishing a lot of pins, the easy mistakes pile up. Wrong board. Weak title. Empty description. Image resized badly in a rush. That is why we built Pinello to score those dimensions directly on pinterest.com while the pin is still in front of you.&lt;/p&gt;

&lt;p&gt;The main benefit is not that it predicts the future perfectly. It is that it catches the obvious misses before they become performance problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The few changes that fix most weak pins
&lt;/h2&gt;

&lt;p&gt;If I had to simplify all of this down to the handful of fixes that matter most, it would be these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use vertical 2:3 images.&lt;/strong&gt; This is still the easiest win.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put the keyword early in the title.&lt;/strong&gt; Do not bury the topic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a real description.&lt;/strong&gt; Empty descriptions are usually wasted upside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose the board on purpose.&lt;/strong&gt; Context matters more than a lot of creators assume.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That will not guarantee a viral pin. It will give the pin a fairer chance, which is usually the more useful goal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" alt="Pinello scoring a Pinterest pin — showing image, board fit, title, description, and keyword scores" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Score your next pin before posting
&lt;/h2&gt;

&lt;p&gt;Before you hit publish, give the pin one last check. &lt;a href="https://chromewebstore.google.com/detail/kmelegdnljikegoemigfgnpcbllmkije" rel="noopener noreferrer"&gt;Install Pinello from the Chrome Web Store&lt;/a&gt; — it's free, works directly on pinterest.com, and scores your pins across all 5 dimensions before you post. No signup needed.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build browser tools that help creators optimize before publishing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pinterest</category>
      <category>seo</category>
      <category>socialmedia</category>
      <category>contentmarketing</category>
    </item>
    <item>
      <title>How I Set Up PostHog in a Chrome Extension (MV3, Content Script + Background Worker)</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/how-i-set-up-posthog-in-a-chrome-extension-mv3-content-script-background-worker-5ale</link>
      <guid>https://dev.to/amrita-labs/how-i-set-up-posthog-in-a-chrome-extension-mv3-content-script-background-worker-5ale</guid>
      <description>&lt;p&gt;Every analytics tutorial I found assumed I was building a normal web app. One runtime. One page lifecycle. One obvious place to initialize the SDK.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A Chrome extension in V3 is not that polite.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In Manifest V3, you have a background service worker that goes to sleep, content scripts living inside tabs, and little UI surfaces like the popup that vanish the second someone clicks away. The first time I tried to add PostHog to that setup, I realized the usual advice was not going to help much.&lt;/p&gt;

&lt;p&gt;So this is the setup I ended up with for a Chrome extension: simple enough to maintain, anonymous by default, and good enough to answer the only questions I actually care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first decision: where PostHog should live
&lt;/h2&gt;

&lt;p&gt;This is the part that matters most.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; initialize PostHog in the background service worker. You get one shared place, which is nice. But the background worker cannot see the DOM, and most of the interesting product moments in my extensions happen where the user is typing or looking at something inside the page.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; initialize it in the popup or options page too. That is easy, but it only works while that UI is open. For actual product usage, that felt too narrow.&lt;/p&gt;

&lt;p&gt;I ended up initializing PostHog in the &lt;strong&gt;content script&lt;/strong&gt;. That puts it closest to the real user action. In MV3, content scripts run in an isolated world, so PostHog's CDN setup is workable there as long as the project API key is available at build time.&lt;/p&gt;

&lt;p&gt;I still use the background worker for extension plumbing. I just do not make it the main analytics home.&lt;/p&gt;

&lt;h2&gt;
  
  
  The small build-time trick that makes this workable
&lt;/h2&gt;

&lt;p&gt;The PostHog project API key is public anyway, so I stopped overthinking it and baked it into the build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// wxt.config.ts — bake the key at build time&lt;/span&gt;
&lt;span class="c1"&gt;// Set VITE_POSTHOG_PROJECT_API_KEY in your CI secrets&lt;/span&gt;

&lt;span class="c1"&gt;// telemetry.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;POSTHOG_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_POSTHOG_PROJECT_API_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That avoided adding another config fetch or permission dance. For a Chrome extension, fewer moving parts is usually the right answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  I use an anonymous device ID, not a user ID
&lt;/h2&gt;

&lt;p&gt;I did not want email addresses, names, or anything else that would make the privacy story messy. Privacy of my users as important to me as my own privacy while using products.&lt;/p&gt;

&lt;p&gt;So on install, I generate a random UUID and keep it in &lt;code&gt;chrome.storage.local&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOrCreateDeviceId&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stored&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deviceId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;stored&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomUUID&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That becomes PostHog's &lt;code&gt;distinct_id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It is enough to answer questions like "Did this person install and come back?" without turning the extension into a surveillance project.&lt;/p&gt;

&lt;h2&gt;
  
  
  I track fewer events than I thought I would
&lt;/h2&gt;

&lt;p&gt;My first instinct was to track everything. That would have been a mistake.&lt;/p&gt;

&lt;p&gt;In practice, four events told me almost everything I needed to know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Install (once)&lt;/span&gt;
&lt;span class="nx"&gt;posthog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;install&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getManifest&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Core value action (the moment they get value)&lt;/span&gt;
&lt;span class="nx"&gt;posthog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subject_scored&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;dimension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Monetization trigger&lt;/span&gt;
&lt;span class="nx"&gt;posthog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paywall_shown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;free&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;scores_used&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Expansion action&lt;/span&gt;
&lt;span class="nx"&gt;posthog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rewrite_requested&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;dimension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is it.&lt;/p&gt;

&lt;p&gt;Those four events tell me whether people are installing, reaching the value moment, hitting the limit, and asking for the "do it for me" feature. I can always add more later, but starting small kept the data readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging got easier once I stopped putting it in the UI
&lt;/h2&gt;

&lt;p&gt;For development, I auto-enable debug mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debugEnabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MODE&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if I need to turn on extra logging manually, I can do it from DevTools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;debugLogging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I briefly considered a user-facing debug toggle. Then I imagined normal users seeing it and wondering whether something was broken. That was enough to kill the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dashboard I actually check
&lt;/h2&gt;

&lt;p&gt;This part is refreshingly unglamorous.&lt;/p&gt;

&lt;p&gt;I set up one funnel insight:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;li&gt;Core action&lt;/li&gt;
&lt;li&gt;Paywall shown&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then I filter by &lt;code&gt;app&lt;/code&gt; and look at daily trends.&lt;/p&gt;

&lt;p&gt;That is basically the whole analytics system. I do not need 19 dashboards. I need a quick answer to: are people using the thing, and where do they stop?&lt;/p&gt;

&lt;h2&gt;
  
  
  The privacy part I did not want to get wrong
&lt;/h2&gt;

&lt;p&gt;A few rules I kept from day one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Anonymous UUID only — no PII&lt;/li&gt;
&lt;li&gt;✅ No page content in events, only counts and categories&lt;/li&gt;
&lt;li&gt;✅ Privacy policy discloses anonymous usage events&lt;/li&gt;
&lt;li&gt;✅ Chrome Web Store data disclosure does &lt;strong&gt;not&lt;/strong&gt; claim personally identifiable information&lt;/li&gt;
&lt;li&gt;✅ Even if a UUID is often treated differently from direct personal data, I still disclose it plainly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gave me a setup I could defend without squirming.&lt;/p&gt;

&lt;h2&gt;
  
  
  If I were helping a friend do this tomorrow
&lt;/h2&gt;

&lt;p&gt;I would not start with "How do I instrument everything?"&lt;/p&gt;

&lt;p&gt;I would start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one place to initialize PostHog&lt;/li&gt;
&lt;li&gt;one anonymous identifier&lt;/li&gt;
&lt;li&gt;four or five events that map to the funnel&lt;/li&gt;
&lt;li&gt;one dashboard you will actually open&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gets you useful telemetry in a Chrome extension without letting analytics become its own side project.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build Chrome extensions with privacy-first analytics.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>chrome</category>
      <category>analytics</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Azure Functions ESM Imports: The Silent Bug That Deploys Fine and Registers 0 Endpoints</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/azure-functions-esm-imports-the-silent-bug-that-deploys-fine-and-registers-0-endpoints-1fn6</link>
      <guid>https://dev.to/amrita-labs/azure-functions-esm-imports-the-silent-bug-that-deploys-fine-and-registers-0-endpoints-1fn6</guid>
      <description>&lt;p&gt;I had one of those deploys that makes you question your own eyesight. &lt;code&gt;func azure functionapp publish&lt;/code&gt; said everything was fine. Azure Portal showed a healthy Function App. My local tests passed. The build passed. Then I ran &lt;code&gt;az functionapp function list&lt;/code&gt; and got... nothing.&lt;/p&gt;

&lt;p&gt;Not broken endpoints. Not one broken endpoint. Zero endpoints registered.&lt;/p&gt;

&lt;p&gt;I lost about four hours to this before the fix turned out to be one boring, insulting detail: I was missing &lt;code&gt;.js&lt;/code&gt; on a relative import.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup looked healthy
&lt;/h2&gt;

&lt;p&gt;This was the stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Functions v4&lt;/li&gt;
&lt;li&gt;Node.js 22&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"type": "module"&lt;/code&gt; in &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Clean local runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which is exactly why this bug is so annoying. Everything around the app looks healthy. Azure uploads the code just fine. The runtime is what falls over.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual ESM import problem in Azure Functions
&lt;/h2&gt;

&lt;p&gt;In Node ESM, relative imports need file extensions. Every time. TypeScript does not magically exempt you from that.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Looks fine in dev, fails in production Node ESM&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logLlmCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../telemetry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ What the runtime actually needs&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logLlmCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../telemetry.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That mismatch was the whole issue.&lt;/p&gt;

&lt;p&gt;TypeScript compiled happily. Vitest ran happily. My editor did not complain. But once Azure tried to load the compiled JavaScript, Node followed ESM rules strictly, hit &lt;code&gt;ERR_MODULE_NOT_FOUND&lt;/code&gt;, and the Functions host never finished registering the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Azure Functions feels silent when this breaks
&lt;/h2&gt;

&lt;p&gt;This is the part that made the whole thing feel cursed.&lt;/p&gt;

&lt;p&gt;The deploy command can still succeed because the package upload is fine. The Function App can still start. The failure happens during cold start, when the runtime walks your module graph. If one import is wrong, the app crashes before Azure registers any functions.&lt;/p&gt;

&lt;p&gt;So from the outside, it looks like a successful deployment with a mysteriously empty Function App. The real error usually lives in Application Insights, not in the publish output.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I finally diagnosed it
&lt;/h2&gt;

&lt;p&gt;The first useful command was this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az functionapp &lt;span class="k"&gt;function &lt;/span&gt;list &lt;span class="nt"&gt;--name&lt;/span&gt; your-func-app &lt;span class="nt"&gt;--resource-group&lt;/span&gt; your-rg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that returns an empty array right after a "successful" deploy, I would assume cold-start failure until proven otherwise.&lt;/p&gt;

&lt;p&gt;From there, Application Insights told the truth. In &lt;strong&gt;Traces&lt;/strong&gt;, filtering for &lt;code&gt;ERR_MODULE_NOT_FOUND&lt;/code&gt; made the problem obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix was annoyingly simple
&lt;/h2&gt;

&lt;p&gt;I went through every relative import in my TypeScript source and added &lt;code&gt;.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;coherenceScore&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./scoring.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logLlmCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../telemetry.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CACHE_TTL&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../shared/constants.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yes, importing &lt;code&gt;.js&lt;/code&gt; from a &lt;code&gt;.ts&lt;/code&gt; file feels wrong the first time you do it.&lt;/p&gt;

&lt;p&gt;Yes, it is still the right thing to do for Node ESM.&lt;/p&gt;

&lt;p&gt;After that, the exact same deployment registered endpoints normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would check before every Azure Functions ESM deploy now
&lt;/h2&gt;

&lt;p&gt;If I were doing this from scratch again, I would add a quick pre-deploy check for imports missing &lt;code&gt;.js&lt;/code&gt; in the built output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="s2"&gt;"from &lt;/span&gt;&lt;span class="se"&gt;\"\.\.&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; dist/ | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;js&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that returns anything, I would stop there and fix it before touching Azure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two other Azure Functions + ESM gotchas I hit
&lt;/h2&gt;

&lt;p&gt;While I was in this rabbit hole, two more sharp edges showed up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;func azure functionapp publish&lt;/code&gt; needs &lt;code&gt;FUNCTIONS_WORKER_RUNTIME&lt;/code&gt;&lt;/strong&gt; either in &lt;code&gt;local.settings.json&lt;/code&gt; or via the &lt;code&gt;--javascript&lt;/code&gt; flag. Without it, you get "Can't determine project language."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The npm-installed &lt;code&gt;func&lt;/code&gt; CLI can break on newer Node versions&lt;/strong&gt;. On Node 26+, I had better luck with &lt;code&gt;winget install Microsoft.Azure.FunctionsCoreTools&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are deploying a Chrome extension backend or any small Node service to Azure Functions, this is worth checking early. When ESM imports are wrong, Azure does not always scream. Sometimes it just smiles, deploys, and gives you an app with no functions.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build Chrome extensions powered by serverless backends on Azure.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>node</category>
      <category>typescript</category>
      <category>serverless</category>
    </item>
    <item>
      <title>I Built a Chrome Extension That Scores Your Gmail Subject Lines — Here's What I Learned</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/i-built-a-chrome-extension-that-scores-your-gmail-subject-lines-heres-what-i-learned-1ade</link>
      <guid>https://dev.to/amrita-labs/i-built-a-chrome-extension-that-scores-your-gmail-subject-lines-heres-what-i-learned-1ade</guid>
      <description>&lt;p&gt;A few months ago I was sending cold emails for a side project. Personalized openers, clear asks, short paragraphs — I thought the emails were good. But my reply rate was garbage. Like, 1-2% garbage.&lt;/p&gt;

&lt;p&gt;I started digging into why. Turns out most of my emails weren't even being opened. They were landing in spam or getting ignored at the subject line.&lt;/p&gt;

&lt;p&gt;The frustrating part? I'd spend 20 minutes writing a thoughtful email body, then slap on a subject line in 5 seconds. "Quick question." "Following up." "Hey!" Basically handing Gmail's spam filter a reason to bury me.&lt;/p&gt;

&lt;p&gt;So I did what any engineer would do when annoyed enough — I built something.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt; is a Chrome extension that sits inside Gmail's compose window. As you type a subject line, it scores it on three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spam risk&lt;/strong&gt; — are you triggering filters without realizing it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarity&lt;/strong&gt; — does the recipient know what this email is about?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Urgency&lt;/strong&gt; — is there a reason to open it now vs. never?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your subject scores poorly, you hit "Suggest rewrite" and the AI proposes alternatives. You pick one, it drops into the subject field. Done.&lt;/p&gt;

&lt;p&gt;No external tabs. No copy-pasting. It just... sits there in Gmail and tells you when your subject line sucks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" alt="EmailSubjectScore Pro scoring a subject line inside Gmail compose — green score means ready to send" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The three things I learned about subject lines
&lt;/h2&gt;

&lt;p&gt;Building the scoring engine forced me to study what actually works. Most subject line advice online is recycled fluff. But three patterns kept showing up in the data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spam triggers are sneakier than you think.&lt;/strong&gt; Everyone knows to avoid "FREE" and "ACT NOW." But "just checking in" and "quick question" are also flagged now — they've been so overused by sales automation that Gmail treats them as spam signals. The extension catches these in real time, which is something I didn't expect to be so useful for myself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specific beats clever, every time.&lt;/strong&gt; "Thought you'd find this interesting" tells the recipient nothing. "Your onboarding flow has a 60% drop-off at step 3" tells them exactly why they should care. The best subject lines make a promise so specific that the person can decide in 2 seconds whether it's worth opening. No mystery, no games.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Front-load or die.&lt;/strong&gt; On a phone lock screen, you see maybe 30-35 characters of a subject line. If your important words come after "Hey [Name], I just wanted to reach out because..." — nobody will ever see them. The extension penalizes subjects where the keywords are buried past character 40. Sounds obvious, but I was doing it constantly before I had a score staring me in the face.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and after
&lt;/h2&gt;

&lt;p&gt;Some real examples from my own emails:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"Quick question"&lt;/td&gt;
&lt;td&gt;"Can you review these 3 vendor proposals by Friday?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Following up"&lt;/td&gt;
&lt;td&gt;"The pricing expires June 30 — here's the breakdown"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Hey!"&lt;/td&gt;
&lt;td&gt;"Your AWS bill is 3x higher than similar companies"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The befores aren't terrible emails written by terrible people. They're what happens when you're in a rush and don't think about it. The afters are what happens when something nudges you for 5 seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" alt="EmailSubjectScore Pro showing rewrite suggestions for a weak subject line" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's at
&lt;/h2&gt;

&lt;p&gt;100 + installs within a month so far, organic CWS traffic. It's early but also tells me that it is a common problem.&lt;/p&gt;

&lt;p&gt;The free tier gives you 50 AI scores per month and 10 per day. Enough to cover a normal person's important emails without hitting a wall.&lt;/p&gt;

&lt;p&gt;If you try it and something feels off — a score that doesn't make sense, a rewrite that sounds weird, a bug where it doesn't show up in compose — genuinely tell us. We're building this for people who send emails that matter, and the best feedback comes from people actually using it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;Install EmailSubjectScore Pro (free)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build browser tools for people who send important emails.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>tutorial</category>
      <category>email</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Write Subject Lines That Actually Get Opened</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/how-to-write-subject-lines-that-actually-get-opened-2h0g</link>
      <guid>https://dev.to/amrita-labs/how-to-write-subject-lines-that-actually-get-opened-2h0g</guid>
      <description>&lt;p&gt;I have ruined plenty of decent emails with lazy subject lines.&lt;/p&gt;

&lt;p&gt;Not because the email body was bad. Usually the opposite. I would spend 20 minutes writing a careful message, tweaking the ask, trimming the paragraphs, making sure it sounded human — and then I would type something like "Quick question" in five seconds and call it done.&lt;/p&gt;

&lt;p&gt;That is such a bad trade.&lt;/p&gt;

&lt;p&gt;The subject line is the first decision point. Before someone reads your opener, before they notice your CTA, before they appreciate how thoughtful your email is, they make a snap call about whether this message deserves attention at all.&lt;/p&gt;

&lt;p&gt;If you write outreach from Gmail, &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt; is a free Chrome extension that scores your subject lines for spam risk, clarity, and urgency in real time — right inside the compose window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" alt="Subject line formulas and examples for cold email outreach" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I look back at the subject lines that consistently work better, they are rarely "clever." They usually just do three jobs well.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 things every great subject line does
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. It creates urgency from context, not from hype
&lt;/h3&gt;

&lt;p&gt;A lot of bad subject lines try to manufacture urgency with volume: caps, exclamation marks, pressure words, fake scarcity.&lt;/p&gt;

&lt;p&gt;That is not the kind of urgency people trust.&lt;/p&gt;

&lt;p&gt;The versions that work better usually point to something real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Your trial expires Friday — here is what changes"&lt;/li&gt;
&lt;li&gt;"Before your board meeting Thursday"&lt;/li&gt;
&lt;li&gt;"Quick thought before your launch next week"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those feel urgent because there is an actual reason to pay attention now. "URGENT!!!" feels urgent because the sender is yelling.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It is specific enough to feel like it belongs to one person
&lt;/h3&gt;

&lt;p&gt;Generic subject lines used to get away with more. Not anymore.&lt;/p&gt;

&lt;p&gt;"Quick question," "Checking in," and "Thought you would find this interesting" all blur together now. They do not give the recipient a reason to believe the email is about &lt;em&gt;them&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Specificity is what changes that.&lt;/p&gt;

&lt;p&gt;Compare these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bad: "Quick question"&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better: "Question about your Q3 hiring plan"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bad: "Thought you would find this interesting"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better: "Your competitor just launched a free tier — one thing stood out"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I like one simple test here: could you send this exact subject line to 100 people without changing anything? If yes, it is probably too generic.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. It survives the phone screen test
&lt;/h3&gt;

&lt;p&gt;A lot of emails are first seen on mobile, which means your subject line is fighting for maybe 30-40 visible characters.&lt;/p&gt;

&lt;p&gt;That is why front-loading matters so much.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bad: "I wanted to reach out because your team is hiring..."&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better: "Your dev team is hiring — one candidate idea"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bad: "Following up on our conversation from the conference..."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better: "SaaStr follow-up: the pricing tool I mentioned"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the valuable part of the subject only shows up after character 45, a lot of people will never see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subject line formulas I keep coming back to
&lt;/h2&gt;

&lt;p&gt;I do not believe in one magic template, but there are a few patterns I reach for repeatedly because they sound natural and give the recipient a reason to open.&lt;/p&gt;

&lt;h3&gt;
  
  
  [Their thing] + question
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;"Your podcast episode on pricing — quick follow-up"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This works when there is a genuine trigger. It shows you are replying to something specific, not spraying a template.&lt;/p&gt;

&lt;h3&gt;
  
  
  Specific number + benefit
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;"Cut your support tickets by 40%?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This can work well when the number is real and the benefit is understandable in one glance. If the number feels made up, it backfires fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mutual context
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;"Sarah suggested I reach out"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Warm context still beats cold context. The trick is to use it naturally, not like borrowed credibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observation + curiosity
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;"Noticed your pricing page skips enterprise"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I like this one because it feels grounded. You saw something. You have a reason for the email. That is enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time-anchored
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;"Before your Series B announcement"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This works best when the timing is real. If the deadline is fake, the whole email starts to smell fake too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subject lines I have mostly stopped using
&lt;/h2&gt;

&lt;p&gt;There are a few subject lines I almost never use now, even though they used to feel harmless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Quick question"&lt;/strong&gt; — too generic, too overused, and too closely associated with automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Following up"&lt;/strong&gt; — fine inside a real ongoing thread, weak as a standalone subject because it gives the recipient nothing new to care about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Hope you are doing well"&lt;/strong&gt; — better as a sentence in the body than as the headline for the entire email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fake &lt;code&gt;RE:&lt;/code&gt; or &lt;code&gt;FW:&lt;/code&gt;&lt;/strong&gt; — not worth it. Even if a filter misses it, the recipient notices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;[Their company] x [Your company]&lt;/code&gt;&lt;/strong&gt; — unless the relationship is obvious already, it usually reads like partnership-template filler.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I test subject lines before sending
&lt;/h2&gt;

&lt;p&gt;I do not have a dramatic process for this. I just try not to trust my first draft too much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time scoring.&lt;/strong&gt; If I am writing in Gmail, I want feedback while the email is still open in front of me. That is why EmailSubjectScore Pro shows spam risk, clarity, and urgency beneath the subject field as I type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" alt="EmailSubjectScore Pro showing spam, clarity, and urgency scores below a Gmail subject line" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A/B testing in small batches.&lt;/strong&gt; If two subject lines seem equally good, I split the send and see which one gets better replies. Not forever. Just enough to stop pretending I can always guess right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The phone test.&lt;/strong&gt; I look at the subject the way a recipient probably will: as a tiny line on a crowded phone screen. If the important words are buried, I rewrite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask one other human.&lt;/strong&gt; This sounds almost too simple, but it works. Show someone two or three options and ask which one they would open first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes by email type
&lt;/h2&gt;

&lt;p&gt;A few patterns show up over and over.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cold outreach
&lt;/h3&gt;

&lt;p&gt;People try to be mysterious. Usually it is better to be clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Follow-ups
&lt;/h3&gt;

&lt;p&gt;People reuse "Following up" when they should be adding a new reason to care.&lt;/p&gt;

&lt;h3&gt;
  
  
  Networking emails
&lt;/h3&gt;

&lt;p&gt;People force the connection too hard instead of sounding like a normal person.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internal emails
&lt;/h3&gt;

&lt;p&gt;People go vague on the emails that actually need clarity most. If there is a deadline or decision, put it in the subject.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 60-second subject line audit
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" alt="Subject line formulas and examples for cold email outreach" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before I send an important email, I try to give the subject line one quick pass:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Character count&lt;/strong&gt; — does the important part show up early?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spam phrases&lt;/strong&gt; — anything that sounds like automation?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specificity&lt;/strong&gt; — could this only belong to this person or company?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Urgency&lt;/strong&gt; — is there a real reason to open now?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gut check&lt;/strong&gt; — if a stranger sent this to me, would I open it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That one minute is usually worth more than another ten minutes polishing the body.&lt;/p&gt;

&lt;h2&gt;
  
  
  Score your next subject line
&lt;/h2&gt;

&lt;p&gt;Before your next important email, give the subject line a quick score. &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;Install EmailSubjectScore Pro&lt;/a&gt; — it's free, works inside Gmail, and shows you exactly what feels weak before you hit send. No signup, no copy-pasting to external tools.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build tools for people who send emails that matter.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>coldemail</category>
      <category>productivity</category>
      <category>gmail</category>
    </item>
    <item>
      <title>Why Your Cold Emails Go to Spam (And How to Fix It)</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/why-your-cold-emails-go-to-spam-and-how-to-fix-it-23cc</link>
      <guid>https://dev.to/amrita-labs/why-your-cold-emails-go-to-spam-and-how-to-fix-it-23cc</guid>
      <description>&lt;p&gt;The hardest part about cold email is not rejection. Rejection is information. Silence is the part that messes with your head.&lt;/p&gt;

&lt;p&gt;You send 50 emails, maybe 100 if you are feeling ambitious. You refresh your inbox. Nothing. At first you start rewriting the offer in your head. Then you blame the list. Then you wonder whether your CTA was too soft. Eventually you have to admit the more annoying possibility: maybe the emails never really made it to the inbox in the first place.&lt;/p&gt;

&lt;p&gt;That is a big part of cold outreach. Even when everything is going well, reply rates usually live in the low single digits. So if your deliverability is off, the whole campaign can look dead before a human ever sees it.&lt;/p&gt;

&lt;p&gt;If you write outreach from Gmail, &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt; is a free Chrome extension that scores your subject lines for spam risk, clarity, and urgency in real time — right inside the compose window.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" alt="Email subject line scoring tools comparison — real-time scoring vs web-based checkers" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of "my cold email is not working" turns out to be "my email setup and subject line are quietly working against me." These are the five problems I keep seeing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why cold emails go to spam
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Your subject line sounds like automation
&lt;/h3&gt;

&lt;p&gt;This one has gotten worse over the last few years.&lt;/p&gt;

&lt;p&gt;Everyone already knows to avoid obvious spam language like "Free," "Guaranteed," or "Act now." But the modern trap is subtler: subject lines that sound like they came from a sales sequence.&lt;/p&gt;

&lt;p&gt;"Quick question."&lt;br&gt;
"Following up."&lt;br&gt;
"Just checking in."&lt;/p&gt;

&lt;p&gt;None of those are outrageous on their own. They are just exhausted. Spam filters have seen them millions of times, and so have recipients. Even if your email body is thoughtful, the subject line can frame the whole thing as low-effort automation before the message is opened.&lt;/p&gt;

&lt;p&gt;The fix is not to become clever. It is to become specific. A subject like "Question about your Q3 hiring plan" feels more human because it clearly belongs to someone, somewhere, for a reason.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Your domain has no reputation yet
&lt;/h3&gt;

&lt;p&gt;I see founders do this all the time: buy a domain on Monday, start sending cold email on Tuesday, and then act shocked when Gmail treats them like a stranger.&lt;/p&gt;

&lt;p&gt;A new domain has no trust history. To mailbox providers, that can look a lot like spam.&lt;/p&gt;

&lt;p&gt;If you are starting fresh, you need a warm-up period. Send low-volume emails first. Have real back-and-forth conversations. Get replies. Let the domain build a normal-looking history before you turn it into an outreach engine.&lt;/p&gt;

&lt;p&gt;It is annoying because it feels slow. It is still faster than getting flagged and spending a month trying to recover deliverability.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The body looks promotional instead of personal
&lt;/h3&gt;

&lt;p&gt;Cold email works best when it still feels like email.&lt;/p&gt;

&lt;p&gt;The moment you stuff the message with links, tracking URLs, images, and extra formatting, you start drifting toward newsletter territory. Spam filters notice that, and recipients do too.&lt;/p&gt;

&lt;p&gt;The link count matters more than people think. One link is usually fine. Two can be okay. Three or more, especially with tracking wrappers, starts to feel like marketing automation.&lt;/p&gt;

&lt;p&gt;For a first-touch email, I like to keep it boring on purpose: plain text, one link max, no tracking pixel, no image, no fancy signature circus.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Your sending volume jumps too fast
&lt;/h3&gt;

&lt;p&gt;Mailbox providers care about patterns. Humans are messy but consistent. Spammers spike.&lt;/p&gt;

&lt;p&gt;If your account usually sends 8 emails a day and suddenly sends 200, that is not subtle. It looks like either a compromised account or a brand-new campaign from a domain that has not earned the right to do that yet.&lt;/p&gt;

&lt;p&gt;A gradual ramp is painfully unsexy, but it works better. Increase volume slowly. Let the domain prove it can send outreach without triggering alarms.&lt;/p&gt;

&lt;p&gt;This is one of those things that feels conservative until you have to dig yourself out of a deliverability hole. Then it feels obvious.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. You skipped SPF, DKIM, and DMARC
&lt;/h3&gt;

&lt;p&gt;These are not glamorous settings, but skipping them is one of the easiest ways to sabotage yourself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SPF&lt;/strong&gt; tells receiving servers which systems are allowed to send on behalf of your domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DKIM&lt;/strong&gt; signs the email so it can be verified in transit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DMARC&lt;/strong&gt; tells receiving servers what to do when those checks fail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you skip them, you are asking inbox providers to trust a message that is harder to verify. Some will. Many will not.&lt;/p&gt;

&lt;p&gt;Setting them up is not complicated, but forgetting them is expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I check a subject line before sending
&lt;/h2&gt;

&lt;p&gt;Once the technical setup is decent, the subject line is the part I want feedback on before I launch anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" alt="EmailSubjectScore Pro scoring a subject line for spam risk inside Gmail compose" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few ways I do that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time scoring.&lt;/strong&gt; If I am drafting inside Gmail, I would rather see spam-risk feedback while I am typing than after a campaign underperforms. That is why we built EmailSubjectScore Pro in the first place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small-batch testing.&lt;/strong&gt; If two subject lines both seem reasonable, I send small batches and let replies break the tie.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The phone screen test.&lt;/strong&gt; Most people first see your email on a phone. If the important words are buried after character 40, they may never be seen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are complicated. They just catch problems early, which is most of the battle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subject line patterns that feel safer and more human
&lt;/h2&gt;

&lt;p&gt;I trust these more than the usual "quick question" template language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specific + relevant&lt;/strong&gt; — "Saw your talk at SaaStr — question about pricing"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observation + curiosity&lt;/strong&gt; — "Noticed something on your onboarding page"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct value&lt;/strong&gt; — "Cut your onboarding time by 30%"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-anchored context&lt;/strong&gt; — "Before your Q4 planning next week"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What they have in common is simple: they read like a person had a reason to send them.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick deliverability checklist before a campaign
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbke4k0712d0lemwomfbw.png" alt="Email subject line scoring tools comparison — real-time scoring vs web-based checkers" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before sending a batch of cold emails, this is the boring checklist I would rather run than regret:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Domain is warmed up and has some reply history&lt;/li&gt;
&lt;li&gt;[ ] SPF, DKIM, and DMARC are configured&lt;/li&gt;
&lt;li&gt;[ ] Subject line has been checked for spammy phrasing&lt;/li&gt;
&lt;li&gt;[ ] Body uses one link max on first touch&lt;/li&gt;
&lt;li&gt;[ ] No tracking pixel unless there is a very good reason&lt;/li&gt;
&lt;li&gt;[ ] Sending volume is consistent with recent history&lt;/li&gt;
&lt;li&gt;[ ] Important words appear early enough to make sense on mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that list is clean and the campaign still flops, then I will start questioning the offer. But I try not to blame the copy before I have ruled out deliverability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start scoring before sending
&lt;/h2&gt;

&lt;p&gt;Most cold email mistakes are preventable. You do not need a giant deliverability stack to catch the obvious ones. You just need a way to notice the problems before you hit send.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;Install EmailSubjectScore Pro from the Chrome Web Store&lt;/a&gt; — it's free, works inside Gmail, and takes about 5 seconds to install. Score your next subject line before you send it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is by the team at Amrita Labs. We build tools for people who send important emails.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>gmail</category>
      <category>coldemail</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Pinterest SEO Checklist: Score Your Pins Before Posting</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/pinterest-seo-checklist-score-your-pins-before-posting-55lj</link>
      <guid>https://dev.to/amrita-labs/pinterest-seo-checklist-score-your-pins-before-posting-55lj</guid>
      <description>&lt;p&gt;The easiest way to get disappointed on Pinterest is to treat it like Instagram.&lt;/p&gt;

&lt;p&gt;You make a pretty graphic, post it, wait for engagement, and then wonder why the pin dies with 12 impressions. I did that too at first. The annoying part is that the pin itself may be fine. It is just not packaged in a way Pinterest understands.&lt;/p&gt;

&lt;p&gt;Pinterest is much closer to a search engine than a traditional social platform. A pin is a search result. A board is context. The title and description are metadata. Once that clicks, the whole platform makes more sense.&lt;/p&gt;

&lt;p&gt;And the payoff is different too. A decent Instagram post disappears quickly. A well-optimized Pinterest pin can keep surfacing for months. Some of the pins we have posted keep getting impressions long after we stopped thinking about them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/kmelegdnljikegoemigfgnpcbllmkije" rel="noopener noreferrer"&gt;Pinello&lt;/a&gt; is a free Chrome extension that scores Pinterest pins across 5 dimensions — image, board fit, title, description, and keywords — in real time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" alt="Pinterest pin scoring checklist — 5 dimensions to check before posting" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the checklist I keep coming back to before I post anything important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Pinterest SEO matters more than followers
&lt;/h2&gt;

&lt;p&gt;One thing I like about Pinterest is that it gives smaller creators a better shot than most platforms do.&lt;/p&gt;

&lt;p&gt;A lot of Pinterest searches are unbranded. People search for things like "minimalist living room ideas" or "easy meal prep recipes," not specific creator handles. That means a small account can still win if the pin lines up with what people are actually searching for.&lt;/p&gt;

&lt;p&gt;That is also why SEO matters so much here. If the board, title, description, and image all reinforce the same topic, Pinterest has a much easier time deciding where your pin belongs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 parts of a Pinterest SEO checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Start with the image, because Pinterest does
&lt;/h3&gt;

&lt;p&gt;Pinterest is visual first. If the image does not stop the scroll, the rest of the optimization does not get much of a chance.&lt;/p&gt;

&lt;p&gt;I stick to the boring best practice here: &lt;strong&gt;2:3 ratio, usually 1000×1500px&lt;/strong&gt;. It gives you good feed presence without awkward cropping.&lt;/p&gt;

&lt;p&gt;A few image habits that help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep text overlay short enough to read on a phone&lt;/li&gt;
&lt;li&gt;use contrast that survives thumbnail size&lt;/li&gt;
&lt;li&gt;avoid clutter when one focal point will do&lt;/li&gt;
&lt;li&gt;make sure the image actually signals the topic fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I have to squint at the thumbnail to understand the pin, I assume everyone else will keep scrolling too.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The board tells Pinterest what kind of pin this is
&lt;/h3&gt;

&lt;p&gt;This one gets missed constantly.&lt;/p&gt;

&lt;p&gt;A strong board name gives Pinterest topic context. "Healthy Dinner Recipes" is useful context. "Yum Yum" is not. Same pin, different board, very different signal.&lt;/p&gt;

&lt;p&gt;I try to keep boards boring in the best possible way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;board title uses a searchable phrase&lt;/li&gt;
&lt;li&gt;board description includes a few related keyword variations&lt;/li&gt;
&lt;li&gt;board already has enough on-topic pins to feel coherent&lt;/li&gt;
&lt;li&gt;the new pin genuinely belongs there&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I would be embarrassed to explain why a pin lives on a certain board, I take that as a sign the board choice is wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The title needs to front-load the keyword
&lt;/h3&gt;

&lt;p&gt;Pinterest gives you room for a long title, but users do not see all of it. On mobile, the useful part is often whatever appears in the first 30-40 characters.&lt;/p&gt;

&lt;p&gt;So I try to get the main phrase in early.&lt;/p&gt;

&lt;p&gt;Good titles tend to be specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Minimalist Bedroom Ideas for Small Spaces"&lt;/li&gt;
&lt;li&gt;"15 Easy Meal Prep Recipes for Beginners"&lt;/li&gt;
&lt;li&gt;"2026 Wedding Color Trends"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weak titles tend to sound like placeholders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Check This Out!"&lt;/li&gt;
&lt;li&gt;"Bathroom Inspo"&lt;/li&gt;
&lt;li&gt;"Cute Ideas"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference is not subtle. One helps Pinterest categorize the pin. The other just fills space.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The description is where a lot of pins quietly lose
&lt;/h3&gt;

&lt;p&gt;A lot of people leave the description blank or write one lazy sentence. That is usually wasted opportunity.&lt;/p&gt;

&lt;p&gt;I do not try to turn pin descriptions into essays. I just want 2-3 natural sentences that give Pinterest more context and give the reader one reason to care.&lt;/p&gt;

&lt;p&gt;The sweet spot for me is usually &lt;strong&gt;100-300 characters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A useful rhythm is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first sentence: primary keyword + what the pin gives them&lt;/li&gt;
&lt;li&gt;second sentence: related keyword variation + who it helps&lt;/li&gt;
&lt;li&gt;third sentence: light CTA if it fits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Easy 30-minute chicken stir fry recipe with vegetables. Great for busy weeknights when you want something healthier than takeout. Save this for your next meal prep day."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That reads like a person wrote it, but it still gives Pinterest plenty of relevant context.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Keywords still matter, but they need to sound natural
&lt;/h3&gt;

&lt;p&gt;The best Pinterest SEO advice is usually less glamorous than people want.&lt;/p&gt;

&lt;p&gt;Hashtags are not doing the job they used to on Pinterest. I do not treat them as meaningful SEO anymore. What matters more is whether your title, board, and description all reinforce the same search intent without sounding stuffed.&lt;/p&gt;

&lt;p&gt;When I need ideas, I usually look in three places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pinterest search suggestions&lt;/li&gt;
&lt;li&gt;Pinterest Trends for seasonality&lt;/li&gt;
&lt;li&gt;the titles and descriptions of pins already ranking for the term&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the keyword strategy makes the description sound robotic, I back off. Pinterest still needs text signals, but readers do too.&lt;/p&gt;

&lt;h2&gt;
  
  
  My quick Pinterest SEO checklist before posting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rv0kiszvgi7jvmp8z1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rv0kiszvgi7jvmp8z1f.png" alt="Pinello scoring a Pinterest pin — showing image, board fit, title, description, and keyword scores" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before posting any pin, I run through this table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;✅ Good (post it)&lt;/th&gt;
&lt;th&gt;❌ Bad (fix first)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;td&gt;2:3 ratio, bright, text readable on mobile&lt;/td&gt;
&lt;td&gt;Square/landscape, dark, tiny text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Board&lt;/td&gt;
&lt;td&gt;Keyword title, 10+ pins, topically matched&lt;/td&gt;
&lt;td&gt;Creative name, empty, random mix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;Keyword in first 40 chars, specific&lt;/td&gt;
&lt;td&gt;Vague, too short, clickbait&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;100-300 chars, 2-3 keywords, CTA&lt;/td&gt;
&lt;td&gt;Empty, one sentence, hashtag spam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keywords&lt;/td&gt;
&lt;td&gt;Natural phrases in description + title&lt;/td&gt;
&lt;td&gt;Hashtags only, or none&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If one row looks weak, I usually fix it before posting. That five-minute cleanup is cheaper than guessing later why the pin stalled.&lt;/p&gt;

&lt;h2&gt;
  
  
  When manual scoring stops being fun
&lt;/h2&gt;

&lt;p&gt;If you only post occasionally, this checklist is manageable.&lt;/p&gt;

&lt;p&gt;If you are batch-creating pins for a business, it gets tedious fast. That is where automation helps. Pinello scores those same five dimensions directly on pinterest.com, which is mostly useful because it catches the boring mistakes I miss when I am rushing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" alt="Pinello scoring a Pinterest pin — showing image, board fit, title, description, and keyword scores" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The practical benefit is not "AI magic." It is just fewer avoidable misses: wrong board, weak title, empty description, off-ratio image.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 80/20 changes that move the needle fastest
&lt;/h2&gt;

&lt;p&gt;If this all feels like a lot, these are the three adjustments I would make first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use 2:3 images consistently.&lt;/strong&gt; Feed presence matters more than people think.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write real descriptions.&lt;/strong&gt; Two thoughtful sentences beats an empty field every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rename vague boards.&lt;/strong&gt; Searchable board titles help every future pin on that board.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those three changes are not flashy, but they do more for Pinterest SEO than most hacks people chase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start scoring before posting
&lt;/h2&gt;

&lt;p&gt;Your next pin might quietly compound traffic for months, or it might disappear before anyone really sees it. The difference is often a few minutes of optimization before you hit publish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/kmelegdnljikegoemigfgnpcbllmkije" rel="noopener noreferrer"&gt;Install Pinello from the Chrome Web Store&lt;/a&gt; — it's free, works directly on pinterest.com, and scores your pins across all 5 dimensions before you post. No signup needed.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the team at Amrita Labs. We build browser tools that help creators optimize before publishing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pintrest</category>
      <category>seo</category>
      <category>social</category>
      <category>media</category>
    </item>
    <item>
      <title>Chaty Alternative for Shopify: Free Forever, No Tracking, No Visitor Cap (2026)</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/chaty-alternative-for-shopify-free-forever-no-tracking-no-visitor-cap-2026-57g5</link>
      <guid>https://dev.to/amrita-labs/chaty-alternative-for-shopify-free-forever-no-tracking-no-visitor-cap-2026-57g5</guid>
      <description>&lt;p&gt;&lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; is a free Shopify chat button that competes directly with Chaty. This is a technical comparison of both apps, published by the team that ships Amrita Chat Widget — bias disclosed up front. Each claim is a fair comparison and where Chaty is stronger, or &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; we say so.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F956l8dek1mli3n05jvcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F956l8dek1mli3n05jvcd.png" alt="Amrita Chat Widget for Shopify — one button, 9 messaging channels (WhatsApp, Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, phone)" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Amrita Chat Widget on a Shopify storefront — one button opens 9 channels: WhatsApp, Facebook Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, phone.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Amrita Chat Widget&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Chaty Free&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Chaty Paid&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Free forever&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free up to 500 visitors/mo&lt;/td&gt;
&lt;td&gt;$15 / $39 / $79 per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visitor cap&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;500/mo&lt;/td&gt;
&lt;td&gt;10K / 50K / 150K per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cookies set on storefront&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 (including a persistent visitor ID)&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External scripts loaded&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 (&lt;code&gt;cdn.chaty.app/pixel.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shadow DOM isolation (prevents theme CSS collisions)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Channels supported&lt;/td&gt;
&lt;td&gt;9 (WhatsApp, Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, phone)&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App Store listing languages&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;8&lt;/strong&gt; (EN, ES, FR, PT-BR, DE, IT, NL, JA)&lt;/td&gt;
&lt;td&gt;1 (EN)&lt;/td&gt;
&lt;td&gt;1 (EN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admin features (agent avatars, business hours, country targeting, merge tags, live chat + AI via Chatway integration)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Short version:&lt;/strong&gt; Amrita Chat Widget is the right pick for stores that want a lightweight, private-by-default chat button that stays free at any traffic level. Chaty is the right pick for stores that need agent avatars, business hours scheduling, 20+ channels including WeChat/Skype/TikTok, or live chat plus AI. Chaty is more mature and has been shipping longer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Chaty Free is stronger today:&lt;/strong&gt; page targeting, click triggers, an attention-pulse animation, and a contact-form channel are all in Chaty's free plan. &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; does not ship these YET. Stores that need any of them today are better served by Chaty Free up to the 500 visitor/month cap.&lt;/p&gt;




&lt;h2&gt;
  
  
  When to pick which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose Amrita Chat Widget&lt;/strong&gt; if the store has exceeded Chaty's 500 visitor/month free cap and paid tiers are not justified, if the storefront's theme has previously been affected by widget CSS bleed, or if the store sells internationally — &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; App Store listing and widget both localize into 8 languages, Chaty's listing is English only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay on Chaty&lt;/strong&gt; if the store needs agent-side workflows (avatars, business hours scheduling, country targeting, merge tags), if it specifically requires WeChat, Skype (which Microsoft retired in 2025), TikTok, or Poptin, or if it needs live chat plus AI via the &lt;a href="https://chaty.app/chat-button/chatway" rel="noopener noreferrer"&gt;Chatway&lt;/a&gt; integration.&lt;/p&gt;

&lt;p&gt;Both apps solve the same top-level problem: a chat button on a Shopify storefront. The differences are in the engineering trade-offs behind that button.&lt;/p&gt;




&lt;h2&gt;
  
  
  Amrita Chat Widget at a glance
&lt;/h2&gt;

&lt;p&gt;Amrita Chat Widget installs from the Shopify App Store in under 5 minutes. Setup happens entirely inside the theme editor — no external dashboard, no separate account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbouxzehh7lii8w7wdum7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbouxzehh7lii8w7wdum7.png" alt="Amrita Chat Widget theme editor setup — enable App Embed, add channels, save" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Setup: enable the App Embed in the theme editor, enter the messaging channels in use for the store, save. No code required.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1m4iueagq75b9lntkgdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1m4iueagq75b9lntkgdr.png" alt="Amrita Chat Widget feature panel — 9 messaging channels for Shopify: WhatsApp, Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, phone" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;9 channels supported: WhatsApp, Facebook Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, phone. Merchants enable the channels their team actively replies on and hide the rest.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz1b1y0o41lmqqm4ffghk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz1b1y0o41lmqqm4ffghk.png" alt="Amrita Chat Widget WhatsApp pre-fill — messages open with the merchant's pre-written greeting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Preset greeting for WhatsApp: a customer taps the chat button, WhatsApp opens with the merchant's pre-written message already in the compose box. The same pre-fill behavior is supported for SMS and Email.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amrita Chat Widget in six bullets:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free at any traffic level.&lt;/strong&gt; No visitor cap, no upgrade prompts, no gated features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9 messaging channels&lt;/strong&gt; in a single button: WhatsApp, Facebook Messenger, Instagram DM, SMS, Email, LINE, Viber, Telegram, and click-to-call phone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero cookies set&lt;/strong&gt; on the storefront. Zero third-party scripts. No data leaves the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM isolated.&lt;/strong&gt; The theme's CSS cannot affect the widget, and the widget's CSS cannot affect the theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8-language admin.&lt;/strong&gt; English, Spanish, French, Portuguese (BR), German, Italian, Dutch, Japanese. The widget itself auto-localizes to the storefront language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Under 5 minutes to install&lt;/strong&gt; from the &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Shopify App Store&lt;/a&gt;. No account signup, no billing screen.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Chaty does to the storefront (as of 2026-07)
&lt;/h2&gt;

&lt;p&gt;The findings below were captured by loading Chaty's demo store inspection. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. No Shadow DOM isolation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowRoot&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
&lt;span class="c1"&gt;// → 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every element the Chaty widget renders lives in the main document. Chaty's stylesheet loads into the customer theme &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; HTML. This is why some merchants report Chaty rendering incorrectly on specific themes. If you don't want to break your themes use &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amrita Chat Widget mounts inside a &lt;code&gt;#shadow-root&lt;/code&gt;. The theme's CSS cannot reach the widget, and the widget's CSS cannot affect the theme — an isolation model designed to avoid theme CSS collisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. External tracking script loads on every page
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cdn.chaty.app/pixel.js?id=ebjpftyjrx&amp;amp;shop=chaty-demo.myshopify.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Third-party origin. The filename is &lt;code&gt;pixel.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget's&lt;/a&gt; JavaScript ships from Shopify's own CDN as an app embed. No third-party origin, no additional entries required in a Content Security Policy allowlist. This matters for stores that maintain a strict CSP for security and &lt;strong&gt;privacy.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Six global functions leak into &lt;code&gt;window&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch_chaty&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close_chaty&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open_chaty_whatsapp_popup&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close_chaty_whatsapp_popup&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open_chaty_contact_form&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close_chaty_contact_form&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Programmatic access is useful for triggering the chat from a custom button. It also creates a namespace-collision risk if another app or the store's theme defines a &lt;code&gt;launch_*&lt;/code&gt; global.&lt;/p&gt;

&lt;p&gt;Amrita Chat Widget exposes no globals on &lt;code&gt;window&lt;/code&gt; by default. When programmatic control is needed, a single scoped API can be enabled instead of six top-level functions.&lt;/p&gt;




&lt;p&gt;None of the findings above indicate Chaty is doing anything wrong. These are engineering choices — perfectly valid for a chat widget. But they are choices, and merchants selecting a chat widget should evaluate them against their own storefront requirements.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pricing model
&lt;/h2&gt;

&lt;p&gt;Chaty's four tiers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Visitor cap&lt;/th&gt;
&lt;th&gt;New features unlocked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;500/mo&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;$15/mo&lt;/td&gt;
&lt;td&gt;10,000/mo&lt;/td&gt;
&lt;td&gt;Agents Pop Up, page targeting, scheduling, country targeting, merge tags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$39/mo&lt;/td&gt;
&lt;td&gt;50,000/mo&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Growth&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;150,000/mo&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Chaty's Pro and Growth tiers ship identical feature sets to Basic. The only variable across the three paid tiers is the visitor cap. At $79/month, the additional cost purchases traffic allowance, not additional widget capability. A store doing 200,000 pageviews pays $79/month for the same widget a store doing 12,000 pageviews pays $15/month for.&lt;/p&gt;

&lt;p&gt;This model is a rational fit for businesses with per-visitor serving costs. &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; has none — the widget is a static asset served from Shopify's own CDN. Pricing reflects that architecture: Amrita Chat Widget is &lt;strong&gt;free&lt;/strong&gt; at any traffic level. &lt;/p&gt;




&lt;h2&gt;
  
  
  Language coverage
&lt;/h2&gt;

&lt;p&gt;Chaty's App Store listing is available only in English. Merchants browsing the German, Japanese, or Brazilian Shopify App Store see "This app is not translated into your language" at the top of the Chaty listing — a friction point during evaluation from non-English markets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Amrita Chat Widget&lt;/a&gt; App Store listing ships in 8 languages: English, Spanish, French, Portuguese (Brazil), German, Italian, Dutch, and Japanese. &lt;/p&gt;




&lt;h2&gt;
  
  
  Migrating from Chaty in five minutes
&lt;/h2&gt;

&lt;p&gt;Migration completes in five steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Uninstall Chaty&lt;/strong&gt; from Shopify Admin → Apps. The storefront reloads without the widget on the next request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear the residual cookies&lt;/strong&gt; in a test browser (Chrome → F12 → Application → Cookies → right-click the five &lt;code&gt;chaty_*&lt;/code&gt; entries → Delete). Real visitors' cookies expire on their own schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Amrita Chat Widget&lt;/strong&gt; from &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;the Shopify App Store&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable the App Embed&lt;/strong&gt; in the theme editor (Theme customize → App embeds → toggle "Amrita Chat Widget" on).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enter the channels in use&lt;/strong&gt; — WhatsApp number, Messenger page, Instagram handle, and any others the team replies on. Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Amrita Chat Widget does not present a billing screen, a visitor-cap warning, or an upgrade prompt at any point during setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Amrita Chat Widget really free?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, at any traffic level — no visitor cap, no gated features. The widget is served from Shopify's CDN, so Amrita Chat Widget has no per-visitor infrastructure cost. A free tier will remain part of the product; any change to the pricing model would be disclosed on the App Store listing before it took effect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work with every theme?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The widget renders inside a Shadow DOM, a browser-native isolation mechanism. The theme's CSS cannot reach into the widget, and the widget's CSS cannot affect the theme. Amrita Chat Widget renders identically on Dawn, Prestige, Impulse, Warehouse, and every custom theme it has been tested against.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens above 500 visitors per month?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nothing. Amrita Chat Widget does not implement a visitor cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the performance cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amrita Chat Widget's JavaScript ships from Shopify's CDN as an app embed. It loads no third-party scripts, sets no cookies, and runs no analytics. The performance cost is a single same-origin script tag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are WeChat, Skype, TikTok, or Poptin supported?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not currently. Amrita Chat Widget supports 9 channels: WhatsApp, Facebook Messenger, Instagram, SMS, Email, LINE, Viber, Telegram, and phone. Channel additions are prioritized by merchant demand — three or more merchant requests for a specific channel typically trigger implementation. Requests can be sent via Reddit DM (&lt;code&gt;/u/sukhmeet2390&lt;/code&gt;) or as a GitHub issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can the widget language differ from the storefront language?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The widget reads &lt;code&gt;&amp;lt;html lang&amp;gt;&lt;/code&gt;, the attribute Shopify sets when a language is assigned to a domain or path. A Japanese storefront served at &lt;code&gt;/ja/&lt;/code&gt; renders the widget in Japanese automatically — no merchant configuration required.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Chaty is great if the store needs agent-side workflows (avatars, business hours scheduling, country targeting, merge tags), and if it needs live chat plus AI via the &lt;a href="https://chaty.app/chat-button/chatway" rel="noopener noreferrer"&gt;Chatway&lt;/a&gt; integration.&lt;/p&gt;

&lt;p&gt;Amrita Chat Widget ships a different product: 9 channels, zero cookies, zero third-party scripts, Shadow DOM isolation, an 8-language admin, and a permanent free tier at any traffic level. Stores that prioritize a lighter storefront footprint and predictable pricing over channel breadth and agent workflows should use Amrita Chat Widget.&lt;/p&gt;

&lt;p&gt;Both apps solve the same top-level problem through different engineering trade-offs. The right choice depends on the store's requirements.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Amrita Chat Widget is built and maintained by &lt;a href="https://amrita-labs.com" rel="noopener noreferrer"&gt;Amrita Labs&lt;/a&gt;, an independent studio building focused Shopify apps. &lt;a href="https://apps.shopify.com/chat-widget-1" rel="noopener noreferrer"&gt;Install Amrita Chat Widget on the Shopify App Store&lt;/a&gt; — free forever, under five minutes to set up.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>chat</category>
      <category>chatyalternative</category>
      <category>chatty</category>
    </item>
    <item>
      <title>5 Best Chrome Extensions for Screen Sharing Privacy (2026)</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/5-best-chrome-extensions-for-screen-sharing-privacy-2026-1gm0</link>
      <guid>https://dev.to/amrita-labs/5-best-chrome-extensions-for-screen-sharing-privacy-2026-1gm0</guid>
      <description>&lt;p&gt;Accidentally sharing the wrong thing on a call is one of those mistakes that feels small for one second and huge the next. Maybe it is a Slack DM, a private channel name, a salary note, a customer account balance, or an internal tab you forgot was still open. The more remote work becomes normal, the more this happens to managers, sales teams, recruiters, customer success reps, founders, and anyone else who lives in browser tabs all day.&lt;/p&gt;

&lt;p&gt;That is why screen-sharing privacy extensions are so useful. They let you hide sensitive information before the meeting starts instead of relying on last-second tab juggling. Some are built for a specific app. Others work on almost any website. The best one for you depends on where your privacy risk actually shows up.&lt;/p&gt;

&lt;p&gt;In this guide, I compared the best Chrome extensions for screen sharing privacy for everyday work use, not technical edge cases. If you mostly share Slack, one tool clearly stands out. If you jump between lots of sites, a generic blur tool may fit better.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Look for in a Screen-Sharing Privacy Extension
&lt;/h2&gt;

&lt;p&gt;Before you install the first blur tool you see, focus on five practical criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App-specific vs. generic:&lt;/strong&gt; A Slack-specific tool can feel much faster inside Slack, while a generic tool is better if you present from many different sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of use:&lt;/strong&gt; In a real meeting, you want one click or one shortcut, not a complicated setup flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover-to-reveal:&lt;/strong&gt; This is underrated. It lets you keep information hidden from your audience while still quickly checking something yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistence:&lt;/strong&gt; If you share the same tools repeatedly, saved blur rules can save a lot of time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price:&lt;/strong&gt; Free is great, but paid can still be worth it if you screen share constantly and need repeatable protection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good rule of thumb: choose the most specific tool that matches your daily workflow. If most of your screen-sharing mistakes happen in Slack, a generic extension can feel slower than something built exactly for Slack. But if you move between dashboards, spreadsheets, admin panels, and web apps all week, flexibility matters more.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Privacy Blur for Slack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Install from Chrome Web Store&lt;/a&gt;&lt;/strong&gt; — Free forever, with Pro at $3/month&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou6c1zknv5r1ibdcjsp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou6c1zknv5r1ibdcjsp4.png" alt="Privacy Blur for Slack — messages blurred during screen sharing" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Privacy Blur for Slack is the best choice if Slack is where your risky screen-sharing moments usually happen. It is built around the parts of Slack people expose by accident: messages, names, channels, media, shortcuts, and persistence rules. That app-specific focus makes it faster than a generic blur tool when you are moving quickly in a meeting.&lt;/p&gt;

&lt;p&gt;Its biggest strength is control without making Slack unusable. You get six independent blur zones, so you can hide exactly what matters and leave the rest of Slack readable. Hover-to-reveal is especially helpful during live calls because you can briefly inspect hidden content without turning privacy off for everyone watching. There is also an &lt;strong&gt;Alt+Shift+B&lt;/strong&gt; shortcut for fast toggling and a floating draggable panel for changing settings on the fly.&lt;/p&gt;

&lt;p&gt;Another important plus: it runs &lt;strong&gt;100% client-side&lt;/strong&gt;, which is exactly what you want when the content includes internal conversations, customer data, or sensitive team discussions.&lt;/p&gt;

&lt;p&gt;The free version covers the core workflow. Pro adds persistence, keyword rules, and sender rules for people who want the same protections to re-apply automatically.&lt;/p&gt;

&lt;p&gt;The real limitation is scope. This is a &lt;strong&gt;Slack Web-only&lt;/strong&gt; tool. If your privacy problem happens across Gmail, dashboards, and random websites as often as it happens in Slack, one of the generic options below may be a better fit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams and individuals who spend a large part of the workday screen sharing Slack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Free forever. Pro: $3/month.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Page Blur — Hide Sensitive Info for Screen Sharing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/page-blur-hide-sensitive/mekiecmbbmjhakpahnijnhgbpkiifnop" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;&lt;/strong&gt; — Free&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3n188es1q6mnfscq2ua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3n188es1q6mnfscq2ua.png" alt="Page Blur Chrome extension for hiding sensitive info during screen sharing" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Page Blur is the best generic option on this list because it covers the core privacy jobs most people need without overcomplicating the experience. You can blur any element on a page, hide tab names, keep blur states persistent, adjust blur intensity, and use keyboard shortcuts. Because it works on any website, it fits people who jump between CRMs, email tools, internal dashboards, and browser tabs all day.&lt;/p&gt;

&lt;p&gt;Its flexibility is the main reason to choose it over an app-specific product. If you need to hide a customer name on one page, a balance figure on another, and the tab title itself while sharing your whole screen, Page Blur can handle that.&lt;/p&gt;

&lt;p&gt;The trade-off is that it stays manual. It is not optimized around one app, so it does not automatically know what is sensitive. You usually need to select the elements yourself every time, which is fine for planned presentations but adds friction when a meeting starts unexpectedly or you need to share your screen quickly without preparation time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Remote workers who need one free privacy extension across many websites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Free.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Privacy Blur: Screen Privacy Tool
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-screen-priva/hdndfcdhmndogkbfeomfpeeafpndhgff" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;&lt;/strong&gt; — Free download, optional premium&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hqjl935gvsl1wcg8x2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hqjl935gvsl1wcg8x2x.png" alt="Safe Screen Share extension on Chrome Web Store" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Privacy Blur: Screen Privacy Tool is the most feature-rich option in this roundup. Instead of focusing on one way to hide content, it gives you &lt;strong&gt;Focus Mode&lt;/strong&gt;, &lt;strong&gt;Full Blur&lt;/strong&gt;, &lt;strong&gt;Word Masking&lt;/strong&gt;, &lt;strong&gt;Area Blur&lt;/strong&gt;, &lt;strong&gt;Decoy Mode&lt;/strong&gt;, and &lt;strong&gt;Smart Financial Mode&lt;/strong&gt;. If you present lots of different kinds of content and want more than click-to-blur, that variety is a real advantage.&lt;/p&gt;

&lt;p&gt;The biggest appeal here is range. Full Blur and Focus Mode are useful when you want to keep attention on one safe part of the screen. Word Masking helps when the same names or terms appear repeatedly. Area Blur is good for quick temporary protection, and Decoy Mode is useful for demos where you want something safer than your live page visible.&lt;/p&gt;

&lt;p&gt;It also emphasizes local processing. But it is still a generic tool, not something tailored to one app or one workflow. The six different modes can feel overwhelming when you just want to jump on a call — you may spend more time choosing which mode to use than actually protecting content. Some advanced features are also premium-only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; People who want the broadest set of privacy modes in one extension.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Free download with optional premium features.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. BlurWeb
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.blurweb.app/" rel="noopener noreferrer"&gt;blurweb.app&lt;/a&gt;&lt;/strong&gt; — Paid premium after trial/refund window&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1nxtkr0cc9c11dxtmp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1nxtkr0cc9c11dxtmp4.png" alt="Blur-Web" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BlurWeb is a strong choice for people who create tutorials, onboarding videos, demos, or livestreams on a repeat basis. It lets you blur any element, draw blur over custom areas, persist blur between sessions, and adjust intensity. That combination makes it useful when you need to clean up the same product walkthrough more than once.&lt;/p&gt;

&lt;p&gt;The standout feature is repeatability. If you regularly record the same pages or demo flows, persistent blur saves time because you do not have to rebuild your privacy setup every session. The draw-blur option also helps when what you want to hide is awkwardly placed and does not map neatly to one clickable element.&lt;/p&gt;

&lt;p&gt;The main drawback is price and setup complexity. BlurWeb is not the best fit for someone who only occasionally presents in meetings — the manual element selection and configuration take time upfront. It makes more sense when polished recordings or repeat demos are part of your job. Like Page Blur, it is also a general tool, so you still decide manually what to hide before every session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Trainers, tutorial creators, sales demo teams, and livestreamers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Paid premium after the trial/refund window.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Obscuro
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/intezer/obscuro" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; — Free and open source (MIT)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5ym3vsjwpzhhhzdc4tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5ym3vsjwpzhhhzdc4tk.png" alt="Obscuro" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obscuro is the best option for developers and security-focused teams because it is built around rules, not just manual clicking. It can use &lt;strong&gt;CSS selectors&lt;/strong&gt; and &lt;strong&gt;regex pattern matching&lt;/strong&gt; to detect sensitive data such as emails, card numbers, and other text patterns, then either &lt;strong&gt;blur&lt;/strong&gt; or &lt;strong&gt;scramble&lt;/strong&gt; that content. It is also open source under the MIT license, which matters for teams that want transparency and control.&lt;/p&gt;

&lt;p&gt;For the right user, Obscuro can be more powerful than a generic blur extension. If your internal dashboards, test environments, or admin tools surface the same types of sensitive values again and again, rule-based hiding can be more reliable than manually selecting elements before every call.&lt;/p&gt;

&lt;p&gt;The catch is usability. This is not the easiest tool for non-technical users — configuring CSS selectors and regex patterns requires developer knowledge. The real value comes from setting up rules once and reusing them, but most people who just need quick meeting privacy will find this approach confusing compared to a toggle-based tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers, security teams, and technical internal demo environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price:&lt;/strong&gt; Free and open source.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;App-specific?&lt;/th&gt;
&lt;th&gt;Hover-reveal?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Privacy Blur for Slack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Slack users who screen share often&lt;/td&gt;
&lt;td&gt;Free forever; Pro $3/mo&lt;/td&gt;
&lt;td&gt;Yes — Slack Web only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://chromewebstore.google.com/detail/page-blur-hide-sensitive/mekiecmbbmjhakpahnijnhgbpkiifnop" rel="noopener noreferrer"&gt;Page Blur&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free privacy across many websites&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-screen-priva/hdndfcdhmndogkbfeomfpeeafpndhgff" rel="noopener noreferrer"&gt;Privacy Blur: Screen Privacy Tool&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Users who want many blur modes&lt;/td&gt;
&lt;td&gt;Free + optional premium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.blurweb.app/" rel="noopener noreferrer"&gt;BlurWeb&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tutorials, recordings, livestreams&lt;/td&gt;
&lt;td&gt;Paid premium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/intezer/obscuro" rel="noopener noreferrer"&gt;Obscuro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Developers and security teams&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How to Choose the Right One
&lt;/h2&gt;

&lt;p&gt;Use this simple decision flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If most of your screen sharing happens in Slack:&lt;/strong&gt; choose &lt;strong&gt;Privacy Blur for Slack&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you need one free tool that works across many websites:&lt;/strong&gt; choose &lt;strong&gt;Page Blur&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you want advanced modes like full-screen blur, word masking, or decoy views:&lt;/strong&gt; choose &lt;strong&gt;Privacy Blur: Screen Privacy Tool&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you record tutorials or demos repeatedly and want persistent visual cleanup:&lt;/strong&gt; choose &lt;strong&gt;BlurWeb&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If your team wants programmable, open-source privacy rules:&lt;/strong&gt; choose &lt;strong&gt;Obscuro&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest mistake is choosing the tool with the most features instead of the one that matches your actual workday. In practice, the best screen-sharing privacy extension is the one you can turn on in seconds before a meeting starts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Take
&lt;/h2&gt;

&lt;p&gt;If Slack is where your private messages, channel names, and internal chatter usually leak into meetings, &lt;strong&gt;Privacy Blur for Slack&lt;/strong&gt; is the strongest fit because it solves that exact problem without making Slack hard to use.&lt;/p&gt;

&lt;p&gt;If your screen-sharing risk is spread across lots of sites, &lt;strong&gt;Page Blur&lt;/strong&gt; is the best free all-purpose choice.&lt;/p&gt;

&lt;p&gt;Ready to make Slack safer before your next call? &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Install Privacy Blur for Slack&lt;/a&gt;&lt;/strong&gt; and keep sensitive Slack content hidden while you share.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>extensions</category>
      <category>slack</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Pinterest Pin SEO Checklist Before Publishing: 10 Checks That Get More Saves</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/pinterest-pin-seo-checklist-before-publishing-10-checks-that-get-more-saves-59g2</link>
      <guid>https://dev.to/amrita-labs/pinterest-pin-seo-checklist-before-publishing-10-checks-that-get-more-saves-59g2</guid>
      <description>&lt;p&gt;Most Pinterest creators do not need to publish more pins. They need to publish better ones.&lt;/p&gt;

&lt;p&gt;That is the real 80/20 of Pinterest: one optimized pin can outperform 10 rushed ones. On a platform with 500M+ monthly active users, tiny pre-publish details matter because Pinterest is both a visual platform and a search engine. If your image, title, description, board, and link are aligned, your pin has a much better chance of earning saves and clicks over time.&lt;/p&gt;

&lt;p&gt;That is exactly why tools like &lt;strong&gt;Pinello&lt;/strong&gt; are useful. Instead of guessing whether your pin is ready, Pinello scores it in real time inside Pinterest's pin creation modal across image quality, board fit, title SEO, description optimization, and keyword density — with AI rewrite suggestions when something is weak.&lt;/p&gt;

&lt;p&gt;If you are a food blogger, craft seller, lifestyle creator, or niche publisher, use this &lt;strong&gt;Pinterest pin SEO checklist before publishing&lt;/strong&gt; every time. It takes a few extra minutes, but it can save you from posting pins that look nice and still go nowhere.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rv0kiszvgi7jvmp8z1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rv0kiszvgi7jvmp8z1f.png" alt="Pinello Chrome extension scoring pins in real-time on Pinterest" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10-point pre-publish checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. ✅ Use a vertical image in the 2:3 ratio
&lt;/h3&gt;

&lt;p&gt;Pinterest favors vertical visuals, and &lt;strong&gt;1000 x 1500 px&lt;/strong&gt; remains the safest default size for standard pins. That 2:3 ratio fills space nicely in the feed without getting awkwardly cropped.&lt;/p&gt;

&lt;p&gt;Before you publish, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the image vertical, not square or horizontal?&lt;/li&gt;
&lt;li&gt;Does it still look sharp on mobile?&lt;/li&gt;
&lt;li&gt;Is the subject clear even at a smaller size?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are posting recipes, show the finished dish first. If you sell crafts, show the final product clearly before any close-up details. Lead with the outcome.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ✅ Add a clear text overlay that is easy to read on mobile
&lt;/h3&gt;

&lt;p&gt;A beautiful image is not always a clear image. Pinterest users scroll fast, and your pin often gets judged in seconds.&lt;/p&gt;

&lt;p&gt;Your text overlay should tell people what they are getting right away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"5 Easy Fall Charcuterie Board Ideas"&lt;/li&gt;
&lt;li&gt;"DIY Budget Closet Makeover"&lt;/li&gt;
&lt;li&gt;"Beginner Sourdough Checklist"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep fonts large, high-contrast, and uncluttered. If the text disappears into a busy background, simplify it. Mobile readability matters more than desktop perfection.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ✅ Write a keyword-rich title with the main keyword first
&lt;/h3&gt;

&lt;p&gt;Your pin title should be specific, natural, and front-loaded with the search term you want to rank for. A good rule of thumb is to stay &lt;strong&gt;under 100 characters&lt;/strong&gt; and place the main keyword near the beginning.&lt;/p&gt;

&lt;p&gt;Weak title:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"A Few Ideas I Loved This Week"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Better title:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Small Balcony Garden Ideas for Apartments"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notice the difference: the second one instantly tells Pinterest and the reader what the content is about.&lt;/p&gt;

&lt;p&gt;If you have to choose between clever and clear, choose clear every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ✅ Put keywords in the first sentence of the description
&lt;/h3&gt;

&lt;p&gt;This is one of the easiest wins in Pinterest SEO.&lt;/p&gt;

&lt;p&gt;Pinterest allows up to &lt;strong&gt;500 characters&lt;/strong&gt; in a pin description, but longer is not automatically better. Descriptions in the &lt;strong&gt;100-200 character&lt;/strong&gt; range tend to be the sweet spot for engagement and can drive &lt;strong&gt;25-30% more engagement than max-length descriptions&lt;/strong&gt;. Only the &lt;strong&gt;first 30-60 characters&lt;/strong&gt; are typically visible in the feed preview, so your opening line does the heavy lifting.&lt;/p&gt;

&lt;p&gt;Put the main keyword in the first sentence, naturally.&lt;/p&gt;

&lt;p&gt;Weak description:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"This is one of my favorite things I made lately."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Better description:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"These easy meal prep breakfast ideas help busy moms plan quick, high-protein mornings."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Be direct. Be descriptive. Do not waste the first sentence on filler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F632ynfuvkltk6yde70ih.png" alt="Pinello Chrome extension scoring pins in real-time on Pinterest" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. ✅ Include a simple CTA in the description
&lt;/h3&gt;

&lt;p&gt;Pinterest is not just about getting seen. It is about getting the next action.&lt;/p&gt;

&lt;p&gt;A soft call to action tells people what to do next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Save for later"&lt;/li&gt;
&lt;li&gt;"Click for the full tutorial"&lt;/li&gt;
&lt;li&gt;"Read the full step-by-step guide"&lt;/li&gt;
&lt;li&gt;"Shop the full collection"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need hypey copy. You just need a clear next step. Pairing keywords with a simple CTA makes the description feel complete instead of unfinished.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. ✅ Verify the destination URL before publishing
&lt;/h3&gt;

&lt;p&gt;This sounds obvious, but broken links quietly kill pin performance.&lt;/p&gt;

&lt;p&gt;Before you publish, click through and check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the URL load correctly?&lt;/li&gt;
&lt;li&gt;Does it match the promise of the pin?&lt;/li&gt;
&lt;li&gt;Does it work on mobile?&lt;/li&gt;
&lt;li&gt;Is the page fast enough to keep visitors from bouncing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your pin says "full tutorial," the page should open directly to that tutorial. If your pin promises a printable, recipe, or shopping page, the visitor should land there without confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. ✅ Choose the most specific relevant board
&lt;/h3&gt;

&lt;p&gt;Board placement is context. A strong pin placed on a vague board can underperform.&lt;/p&gt;

&lt;p&gt;If you have a choice between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Recipes"&lt;/li&gt;
&lt;li&gt;"Healthy Recipes"&lt;/li&gt;
&lt;li&gt;"High-Protein Breakfast Recipes"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;choose the most specific relevant board.&lt;/p&gt;

&lt;p&gt;That specificity helps Pinterest better understand where your content belongs. It also helps your ideal audience find it in the right environment. Broad boards feel safe, but specific boards usually send a stronger signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. ✅ Fill in alt text
&lt;/h3&gt;

&lt;p&gt;Alt text is easy to skip, but it is worth filling out. It improves clarity, supports accessibility, and gives you one more place to describe the image accurately.&lt;/p&gt;

&lt;p&gt;Keep it simple and literal. Describe what is actually in the pin image, not a list of random keywords.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Vertical pin showing a white farmhouse kitchen shelf with labeled pantry jars and neutral decor"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Helpful, readable, and relevant beats robotic every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. ✅ Keep branding consistent
&lt;/h3&gt;

&lt;p&gt;The highest-performing creators often look recognizable before users even read the account name.&lt;/p&gt;

&lt;p&gt;Consistency builds that recognition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar colors across pins&lt;/li&gt;
&lt;li&gt;Repeating font choices&lt;/li&gt;
&lt;li&gt;A small logo or brand mark&lt;/li&gt;
&lt;li&gt;A familiar layout style&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not mean every pin should look identical. It means they should feel like they came from the same creator. Over time, that familiarity can increase trust and make your content more memorable in crowded feeds.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. ✅ Publish fresh content, not the exact same image + URL again
&lt;/h3&gt;

&lt;p&gt;Pinterest rewards freshness. Republishing the exact same image with the exact same destination URL is usually weaker than creating a fresh variation.&lt;/p&gt;

&lt;p&gt;Fresh can mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A new pin design for the same blog post&lt;/li&gt;
&lt;li&gt;A different headline angle&lt;/li&gt;
&lt;li&gt;A new cover image&lt;/li&gt;
&lt;li&gt;A different crop or text overlay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, one recipe post could become multiple fresh pins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Easy Weeknight Pasta Dinner"&lt;/li&gt;
&lt;li&gt;"20-Minute Creamy Pasta Recipe"&lt;/li&gt;
&lt;li&gt;"Budget-Friendly Family Pasta Meal"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same destination, new creative angle.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why hashtags no longer work on Pinterest
&lt;/h2&gt;

&lt;p&gt;If you learned Pinterest marketing a few years ago, you were probably told to stuff a few hashtags at the end of every description.&lt;/p&gt;

&lt;p&gt;That advice is outdated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pinterest deprecated hashtags in 2023&lt;/strong&gt;, which means they no longer function as a meaningful discovery tool on the platform. So if you are still adding hashtag bundles to your descriptions, you are using space that could be doing better work.&lt;/p&gt;

&lt;p&gt;What to do instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put your primary keyword in the first sentence&lt;/li&gt;
&lt;li&gt;Add 1-2 closely related phrases naturally in the description&lt;/li&gt;
&lt;li&gt;Match the keyword theme across the image, title, description, board, and landing page&lt;/li&gt;
&lt;li&gt;Write for humans first, search clarity second&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short: stop thinking in hashtags and start thinking in keyword alignment.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmibtt0jwaz11gjusi9b7.png" alt="Pinello scoring panel showing real-time pin analysis inside Pinterest" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to automate this checklist with Pinello
&lt;/h2&gt;

&lt;p&gt;The problem with checklists is not knowing what to do. It is remembering to do it every single time.&lt;/p&gt;

&lt;p&gt;That is where &lt;strong&gt;Pinello — Live Pin Score &amp;amp; SEO for Pinterest Creators&lt;/strong&gt; fits naturally into the workflow. Inside Pinterest's own pin creation modal, it scores your draft in real time across five dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image quality&lt;/li&gt;
&lt;li&gt;Board fit&lt;/li&gt;
&lt;li&gt;Title SEO&lt;/li&gt;
&lt;li&gt;Description optimization&lt;/li&gt;
&lt;li&gt;Keyword density&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something is weak, you see it before you publish. If your copy needs help, Pinello can suggest rewrites. If your image is off-spec or your keyword use is thin, you catch it while the pin is still a draft.&lt;/p&gt;

&lt;p&gt;That matters when you are publishing at volume. Food bloggers, Etsy sellers, and lifestyle creators do not want a separate manual audit every time. They want a quick green-light check inside the workflow they already use.&lt;/p&gt;

&lt;p&gt;Pinello works on &lt;strong&gt;pinterest.com and all country variants&lt;/strong&gt;, offers &lt;strong&gt;50 AI scores per month for free&lt;/strong&gt;, and keeps &lt;strong&gt;structural scoring unlimited&lt;/strong&gt;. Its image analysis also runs &lt;strong&gt;100% locally&lt;/strong&gt;, which is especially useful if you work with original product photography or unpublished content.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before vs. after: a quick optimization example
&lt;/h2&gt;

&lt;p&gt;Here is what a weak pin draft can look like before optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title:&lt;/strong&gt; "Cute idea"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; "Love this so much!! #decor #home #farmhouse"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Board:&lt;/strong&gt; "Home"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image:&lt;/strong&gt; Beautiful, but no text overlay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; Homepage instead of the actual tutorial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why it underperforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The title says nothing searchable&lt;/li&gt;
&lt;li&gt;The description wastes the first sentence&lt;/li&gt;
&lt;li&gt;Hashtags do not help discovery anymore&lt;/li&gt;
&lt;li&gt;The board is too broad&lt;/li&gt;
&lt;li&gt;The destination is not specific&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title:&lt;/strong&gt; "Farmhouse Pantry Organization Ideas for Small Kitchens"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; "Farmhouse pantry organization ideas for small kitchens with labeled jars, shelf styling tips, and budget-friendly storage inspiration. Save for later."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Board:&lt;/strong&gt; "Small Kitchen Organization"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image:&lt;/strong&gt; Vertical 1000x1500 design with a bold text overlay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; Direct link to the pantry organization blog post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same creator. Same topic. Much stronger search signal.&lt;/p&gt;

&lt;p&gt;That is the goal of this checklist: not making your pins sound robotic, but making them unmistakably clear.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need to use all 500 characters in my Pinterest description?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Pinterest allows up to 500 characters, but that does not mean you should force it. For most creators, 100-200 characters is the better target because it stays focused and puts the important keywords up front.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I put keywords in both the title and description?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Use the main keyword in the title and again in the first sentence of the description, then support it with a related phrase or two. Think natural repetition, not keyword stuffing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I publish multiple pins to the same blog post or product page?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes — and you should, as long as the pins are fresh variations. Change the image, headline angle, or design so each pin gives Pinterest a new creative asset to evaluate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final pre-publish rule: score before you post
&lt;/h2&gt;

&lt;p&gt;Most Pinterest underperformance happens before a pin ever goes live. The image is the wrong shape. The title is vague. The first sentence is wasted. The board is too broad. The link is sloppy.&lt;/p&gt;

&lt;p&gt;That is fixable.&lt;/p&gt;

&lt;p&gt;Before you publish your next pin, run this checklist once — or make it even faster by using a live scoring tool inside Pinterest itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install &lt;a href="https://chromewebstore.google.com/detail/pinello/kmelegdnljikegoemigfgnpcbllmkije" rel="noopener noreferrer"&gt;Pinello&lt;/a&gt;&lt;/strong&gt; and check every pin for image quality, board fit, title SEO, description optimization, and keyword density before you hit publish.&lt;/p&gt;

</description>
      <category>pinterest</category>
      <category>seo</category>
      <category>marketing</category>
      <category>contentcreation</category>
    </item>
    <item>
      <title>How to Hide Slack Messages During Screen Sharing: 6 Practical Options</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/how-to-hide-slack-messages-during-screen-sharing-6-practical-options-16oh</link>
      <guid>https://dev.to/amrita-labs/how-to-hide-slack-messages-during-screen-sharing-6-practical-options-16oh</guid>
      <description>&lt;p&gt;You've probably had this moment: you're sharing your screen, talking through a project update, and then you notice Slack sitting there with a private message preview, a sensitive channel name, or a thread you definitely didn't mean to show the whole room.&lt;/p&gt;

&lt;p&gt;If you need a fix fast, &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Privacy Blur for Slack&lt;/a&gt;&lt;/strong&gt; is the most practical option because it lets you keep Slack open while hiding the parts you don't want coworkers or clients to see. But it's not the only way to reduce the risk.&lt;/p&gt;

&lt;p&gt;This guide walks through the best ways to hide Slack messages during screen sharing, ranked by how well they protect your privacy without slowing down your meeting. Some methods are perfect if Slack needs to stay visible. Others work better if you just want the safest possible setup before you click Share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Slack doesn't have a built-in solution
&lt;/h2&gt;

&lt;p&gt;Slack gives you lots of control over notifications, status, and window layout, but it still doesn't offer a true presenter mode that hides message content while you share your screen. That means there is no native Slack setting that blurs existing chats, masks channel names, or hides media previews in the main interface.&lt;/p&gt;

&lt;p&gt;Slack's own Do Not Disturb tools help with &lt;strong&gt;new&lt;/strong&gt; interruptions, not &lt;strong&gt;existing&lt;/strong&gt; content already visible on your screen. So if your sidebar includes confidential channels, your DMs contain employee information, or a thread has customer details in plain view, you need a workaround before the meeting starts.&lt;/p&gt;

&lt;p&gt;The good news: you don't need to overhaul your workflow. In most cases, one of the six options below is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Privacy Blur for Slack — Best if Slack needs to stay on screen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Install Privacy Blur for Slack&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou6c1zknv5r1ibdcjsp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou6c1zknv5r1ibdcjsp4.png" alt="Privacy Blur for Slack — messages blurred during screen sharing" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If Slack actually needs to be visible during the meeting, this is the best option because it solves the real problem instead of working around it. Privacy Blur for Slack works on &lt;strong&gt;app.slack.com in Chrome&lt;/strong&gt; and lets you blur the parts of Slack that usually cause embarrassment during screen sharing: messages, names, channels, and media.&lt;/p&gt;

&lt;p&gt;The big advantage is control. Instead of blurring the entire page, you can choose from &lt;strong&gt;9 independent blur zones&lt;/strong&gt; and keep the rest of Slack usable. Need to glance at a message without turning protection off completely? You can &lt;strong&gt;hover to reveal&lt;/strong&gt; specific content when you need it. There's also an &lt;strong&gt;Alt+Shift+B&lt;/strong&gt; shortcut for quick toggling before a call starts.&lt;/p&gt;

&lt;p&gt;It runs &lt;strong&gt;100% client-side with no data collection&lt;/strong&gt;, so your Slack data stays in your browser, and the free plan is enough for most people. The &lt;strong&gt;Pro plan ($3/month)&lt;/strong&gt; adds persistence and rules if you want your preferred blur setup to stick automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the extension from the Chrome Web Store.&lt;/li&gt;
&lt;li&gt;Open Slack Web in Chrome.&lt;/li&gt;
&lt;li&gt;Turn on the blur zones you want before your meeting starts.&lt;/li&gt;
&lt;li&gt;Hover to reveal only what you need while sharing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the most complete choice for managers, recruiters, founders, support teams, and anyone who has to keep Slack open during live calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Share only the specific window or tab you're presenting
&lt;/h2&gt;

&lt;p&gt;If you don't actually need Slack on screen, the safest method is simply not to share it. Zoom, Google Meet, and Microsoft Teams all let you share a &lt;strong&gt;specific window&lt;/strong&gt; instead of your full desktop, and Meet also lets you share a single browser tab.&lt;/p&gt;

&lt;p&gt;That means you can present your slide deck, browser tab, design file, or spreadsheet while Slack stays on another part of your computer that viewers never see. For many people, this is the easiest zero-install fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open only the file, browser tab, or app you plan to present.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Share&lt;/strong&gt; or &lt;strong&gt;Present&lt;/strong&gt; in your meeting tool.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Window&lt;/strong&gt; or &lt;strong&gt;Tab&lt;/strong&gt; instead of &lt;strong&gt;Entire Screen&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Double-check the preview before confirming.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This works especially well for status updates, demos, and training sessions where Slack is not part of the presentation. The limitation is obvious: if you need to switch into Slack mid-meeting, you'll either need to stop sharing, reshare a different window, or risk showing it anyway. Great safety, less flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Turn on Slack Do Not Disturb or pause notifications
&lt;/h2&gt;

&lt;p&gt;If your main fear is surprise popups, Slack's built-in &lt;strong&gt;Do Not Disturb&lt;/strong&gt; feature is worth using every time you present. It pauses desktop alerts, mobile notifications, and other interruptions for a set amount of time, which immediately lowers the odds of a private message flashing onto your screen at the worst moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Slack, click your profile picture.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Notifications&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose a pause length such as 30 minutes, 1 hour, or a custom time.&lt;/li&gt;
&lt;li&gt;Start your meeting once the snooze icon appears.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is quick, official, and free. It also helps if you're presenting in front of clients, leadership, or a large internal meeting where even a harmless DM preview would feel distracting.&lt;/p&gt;

&lt;p&gt;The downside: Do Not Disturb does &lt;strong&gt;not&lt;/strong&gt; hide existing conversations already open in Slack. Your channel list, message history, names, and media are still visible if Slack itself is on screen. Think of this as a backup layer, not a complete privacy solution. It's best paired with window-only sharing or a blur tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put Slack on a second virtual desktop
&lt;/h2&gt;

&lt;p&gt;Virtual desktops are a simple middle ground between "close Slack completely" and "leave Slack exposed." On Windows, press &lt;strong&gt;Win+Tab&lt;/strong&gt; to create another desktop. On Mac, you can use &lt;strong&gt;Mission Control&lt;/strong&gt; to add a separate desktop space. Then keep Slack on one desktop and your presentation materials on another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a second virtual desktop before the meeting.&lt;/li&gt;
&lt;li&gt;Move Slack to that desktop.&lt;/li&gt;
&lt;li&gt;Keep your slides, browser, or demo on the desktop you'll share.&lt;/li&gt;
&lt;li&gt;Switch carefully only when you need to check messages privately.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This method is helpful if you want Slack available without cluttering the workspace you're showing to everyone else. It can also reduce the mental load of constantly minimizing and reopening apps.&lt;/p&gt;

&lt;p&gt;The tradeoff is that it depends on your own discipline. If you accidentally switch desktops while sharing your entire screen, Slack can still appear. It's safer than leaving Slack front and center, but not as foolproof as blurring or sharing a single window. Best for people who multitask heavily and already use multiple desktops every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Close or minimize Slack before the meeting starts
&lt;/h2&gt;

&lt;p&gt;This is the least fancy option, but it's still one of the most reliable. If Slack does not need to play any role in the meeting, closing it removes the problem completely. No visible messages, no sidebar, no unread threads, no accidental channel-name reveal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finish any urgent Slack replies before the call.&lt;/li&gt;
&lt;li&gt;Quit the Slack desktop app, close the Slack browser tab, or at least minimize the window.&lt;/li&gt;
&lt;li&gt;Start screen sharing only after confirming Slack is gone from view.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This works best for short presentations, interviews, webinars, and client walkthroughs where your attention should already be on the call. It's also a good habit when you're tired or rushed and don't want one more thing to remember.&lt;/p&gt;

&lt;p&gt;The downside is convenience. You lose instant access to chats during the meeting, and you may miss something time-sensitive until the presentation ends. Still, for pure risk reduction, "just close Slack" remains surprisingly effective.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use a generic blur extension like Page Blur or BlurWeb
&lt;/h2&gt;

&lt;p&gt;If you want one privacy tool that works across many websites, a generic blur extension can help. Tools like &lt;strong&gt;Page Blur&lt;/strong&gt; and &lt;strong&gt;BlurWeb&lt;/strong&gt; are designed to blur elements or selected areas on web pages, which means you can use them on Slack, dashboards, CRMs, docs, and other browser-based tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3n188es1q6mnfscq2ua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3n188es1q6mnfscq2ua.png" alt="Page Blur extension on Chrome Web Store — generic blur for any website" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That flexibility is the main appeal. If your workday jumps between many tabs with sensitive information, a general-purpose blur tool may fit better than a site-specific extension.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the extension you prefer.&lt;/li&gt;
&lt;li&gt;Open Slack Web or another site with sensitive content.&lt;/li&gt;
&lt;li&gt;Blur the visible areas manually before you present.&lt;/li&gt;
&lt;li&gt;Test the page once to make sure the blur stays where you expect.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tradeoff is precision and speed. Generic tools are not built specifically for Slack's layout, so they require manual element selection every single time — there's no "toggle Messages on" shortcut. If Slack's interface changes or you switch channels, you'll need to redo the blur setup from scratch. They also cannot automatically detect new messages that arrive mid-call, so content that loads after your initial blur setup may still appear unblurred. For people who screen share Slack often, a Slack-specific tool is usually faster and less error-prone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Hides existing Slack messages?&lt;/th&gt;
&lt;th&gt;Stops new popups?&lt;/th&gt;
&lt;th&gt;Keeps Slack usable during sharing?&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy Blur for Slack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No — pair it with DND&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Daily Slack users who still need Slack open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Share specific window/tab&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, by keeping Slack off screen&lt;/td&gt;
&lt;td&gt;Usually, if Slack stays off the shared surface&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Presentations where Slack isn't needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slack Do Not Disturb&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Preventing surprise notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Virtual desktop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partly&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, privately&lt;/td&gt;
&lt;td&gt;Multitaskers who want Slack nearby&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Close or minimize Slack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Short meetings and lowest-risk setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Generic blur extensions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Usually&lt;/td&gt;
&lt;td&gt;People who need privacy across many websites&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Privacy Blur for Slack work in the Slack desktop app?
&lt;/h3&gt;

&lt;p&gt;No. Privacy Blur for Slack works on &lt;strong&gt;app.slack.com in Chrome&lt;/strong&gt;. If you mainly use the desktop app, you can switch to Slack Web before a meeting or use one of the non-extension methods in this guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Slack Do Not Disturb enough on its own?
&lt;/h3&gt;

&lt;p&gt;Usually no. Do Not Disturb is great for stopping new notification popups, but it does not hide the Slack content that's already sitting on your screen. If Slack will remain visible during the meeting, pair DND with either Privacy Blur for Slack or a window-sharing strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the best setup for people who screen share every day?
&lt;/h3&gt;

&lt;p&gt;If Slack needs to stay open, the most practical setup is &lt;strong&gt;Privacy Blur for Slack + Slack Do Not Disturb&lt;/strong&gt;. That combination protects visible content and reduces the chance of a surprise popup at the same time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The simplest way to avoid an awkward Slack moment
&lt;/h2&gt;

&lt;p&gt;If you screen share often and still need Slack open, use the tool built for that exact problem. &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/privacy-blur-for-slack/cejmffebfhdnhbjkhiobaecdohheimkj" rel="noopener noreferrer"&gt;Install Privacy Blur for Slack&lt;/a&gt;&lt;/strong&gt; and blur messages, names, channels, and media before your next call. It's free forever, works entirely client-side, and takes less than a minute to set up.&lt;/p&gt;

</description>
      <category>slack</category>
      <category>privacy</category>
      <category>remotework</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Write Email Subject Lines That Get Replies</title>
      <dc:creator>Amrita Labs</dc:creator>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/amrita-labs/how-to-write-email-subject-lines-that-get-replies-oe1</link>
      <guid>https://dev.to/amrita-labs/how-to-write-email-subject-lines-that-get-replies-oe1</guid>
      <description>&lt;p&gt;Your email lives or dies in about 2-3 seconds. Before anyone reads your pitch, proposal, follow-up, or intro, they scan the subject line and make a snap decision: open, ignore, or delete.&lt;/p&gt;

&lt;p&gt;That tiny line carries more weight than most people realize. Cleanlist reports that 47% of recipients open an email based on the subject line alone, while 69% report emails as spam based on the subject line alone (Cleanlist 2026). And because average cold email reply rates sit around 3-5% across 53M+ emails analyzed, small subject-line improvements matter a lot more than they look on paper (Saleshandy 2026).&lt;/p&gt;

&lt;p&gt;If you write outreach from Gmail, tools like &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt; make this easier by scoring your subject line for spam risk, clarity, and urgency in real time — right inside the compose window, with no copy-paste to external tools.&lt;/p&gt;

&lt;p&gt;Most people obsess over the email body. Smart senders know the subject line decides whether the body gets a chance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why reply rate matters more than open rate
&lt;/h2&gt;

&lt;p&gt;Apple Mail Privacy Protection made open tracking much less reliable in 2021 by preloading email pixels, so opens are no longer the cleanest signal of real interest. Reply rate is harder to fake, which makes it the better metric for judging whether your subject line attracted the right person enough to respond.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 data-backed tips for subject lines that get replies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Keep it short
&lt;/h3&gt;

&lt;p&gt;The best-performing subject lines are usually &lt;strong&gt;3-7 words and under 45 characters&lt;/strong&gt;. That length works because it is easy to scan on both desktop and mobile, and it forces you to cut filler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;code&gt;Quick question about onboarding&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It sounds human, specific, and easy to process in one glance. Compare it to something bloated like &lt;code&gt;Following up regarding a possible opportunity to improve your onboarding experience&lt;/code&gt;, which feels heavier before the email is even opened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cut throat-clearing words like "following up," "touching base," and "wanted to reach out"&lt;/li&gt;
&lt;li&gt;Remove anything the recipient can learn in the first sentence of the email instead&lt;/li&gt;
&lt;li&gt;Read your subject line out loud; if it feels long, it is long&lt;/li&gt;
&lt;li&gt;Aim for a focused idea, not a full summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A short subject line does not mean vague. It means tight.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Personalize with something real
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Personalized subject lines can lift open rates by 26-50%&lt;/strong&gt;, which is still useful directional evidence even if open rate is no longer the main scoreboard. More important: personalization signals that this email is for &lt;em&gt;them&lt;/em&gt;, not for a list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;code&gt;Idea for Acme's demo flow&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It uses a company name and hints at a relevant topic. That feels more credible than a generic line like &lt;code&gt;Growth idea for your business&lt;/code&gt;, which could have been sent to anyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Personalize with a company name, role, recent launch, or obvious pain point&lt;/li&gt;
&lt;li&gt;Keep the personalized detail near the front&lt;/li&gt;
&lt;li&gt;Use a strong detail, not several weak ones&lt;/li&gt;
&lt;li&gt;Make sure the body matches the promise of the subject line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good personalization is specific and earned. Bad personalization feels stitched in.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Ask a question
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Question-based subject lines can generate 10-21% higher opens.&lt;/strong&gt; They work because they create a small curiosity gap and feel more conversational than a statement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;code&gt;Still hiring SDRs?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; A real question invites a mental response. The reader can instantly tell whether it is relevant, and if it is, they are more likely to open because the email feels like a direct conversation rather than a broadcast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask simple yes/no or short-answer questions&lt;/li&gt;
&lt;li&gt;Keep the question tied to a real business or personal outcome&lt;/li&gt;
&lt;li&gt;Avoid vague questions like &lt;code&gt;Can I help?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use question marks sparingly; one is enough&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Question subjects work especially well for sales outreach, freelancer pitches, recruiting emails, and job search follow-ups.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Avoid spam triggers
&lt;/h3&gt;

&lt;p&gt;This is the easiest win and the most overlooked. If &lt;strong&gt;69% of people report spam based on the subject line alone&lt;/strong&gt;, you cannot afford to sound like a promotion even when your offer is legitimate (Cleanlist 2026).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FREE OFFER INSIDE!!!&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Last chance to 10x revenue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Urgent response needed&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Better examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Question about your Q3 pipeline&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Idea for reducing no-shows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Intro from a fellow founder&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid all caps, excessive punctuation, and hype language&lt;/li&gt;
&lt;li&gt;Be careful with words like "free," "guaranteed," and "urgent" unless they are absolutely necessary&lt;/li&gt;
&lt;li&gt;Skip clickbait phrasing that overpromises&lt;/li&gt;
&lt;li&gt;Write like one person contacting another person&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember the upside and downside together: 47% open based on subject line alone, but 69% may flag spam based on that same line. The subject line is both your first impression and your first filter.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Create urgency without sounding pushy
&lt;/h3&gt;

&lt;p&gt;The goal is not pressure. The goal is relevance &lt;em&gt;now&lt;/em&gt;. Since &lt;strong&gt;58% of replies come from the first email&lt;/strong&gt;, your opening subject line should give the recipient a reason to care today instead of "later," which usually means never.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;code&gt;Before next week's rollout&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It introduces a timeframe without fake drama. It suggests the email is timely, but it does not scream for attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tie urgency to a real event: launch, hiring push, renewal, campaign, deadline&lt;/li&gt;
&lt;li&gt;Use calm phrasing like &lt;code&gt;before&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;ahead of&lt;/code&gt;, or &lt;code&gt;this week&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Avoid manipulative pressure like &lt;code&gt;final notice&lt;/code&gt; or &lt;code&gt;act now&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Make sure the body quickly explains why the timing matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Strong urgency feels helpful. Weak urgency feels salesy.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. A/B test every campaign
&lt;/h3&gt;

&lt;p&gt;Average cold email reply rates are only &lt;strong&gt;3-5%&lt;/strong&gt;, while the best campaigns break &lt;strong&gt;10%+ reply rate&lt;/strong&gt;. That gap is your reminder not to fall in love with the first subject line you write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example test:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A: &lt;code&gt;Idea for Acme's onboarding&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;B: &lt;code&gt;Quick question about onboarding&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are short. Both are clear. But they frame the email differently. One leads with value, the other with conversation. You will not know which angle fits your audience until you test it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test one variable at a time: personalization, question vs statement, or urgency angle&lt;/li&gt;
&lt;li&gt;Keep the email body roughly the same when comparing subject lines&lt;/li&gt;
&lt;li&gt;Use reply rate as the main score, not opens alone&lt;/li&gt;
&lt;li&gt;Save winners and turn them into reusable patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A/B testing does not need to be fancy. It just needs to be consistent.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Time it right
&lt;/h3&gt;

&lt;p&gt;Even a strong subject line can flop if it lands at the wrong moment. &lt;strong&gt;Tuesday and Wednesday mornings&lt;/strong&gt; are consistently strong send windows for cold outreach according to Snov.io's 2026 guidance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Instead of sending &lt;code&gt;Quick question about your hiring funnel&lt;/code&gt; late Friday afternoon, schedule it for Tuesday morning when inboxes are active but not yet buried in end-of-week cleanup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable advice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with Tuesday or Wednesday morning in the recipient's time zone&lt;/li&gt;
&lt;li&gt;Avoid late Friday, weekend, and late-night sends for first-touch cold emails&lt;/li&gt;
&lt;li&gt;Keep timing notes alongside your subject-line test results&lt;/li&gt;
&lt;li&gt;Re-test timing when you change audience segments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timing will not rescue a bad subject line. But good timing gives a good subject line a fair shot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mp8mscdo78sv9ccxanq.png" alt="EmailSubjectScore Pro on Chrome Web Store — real-time subject line scoring for Gmail" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check your subject lines before sending
&lt;/h2&gt;

&lt;p&gt;If you send important emails from Gmail, the fastest habit upgrade is to check the subject line &lt;em&gt;before&lt;/em&gt; you hit send, not after a campaign underperforms.&lt;/p&gt;

&lt;p&gt;That is where &lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt; fits naturally into the workflow. It works directly inside the Gmail compose window and scores your subject line in real time across three practical dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spam risk&lt;/strong&gt; — does this sound promotional, manipulative, or filter-friendly in the wrong way?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarity&lt;/strong&gt; — will the recipient immediately understand what the email is about?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Urgency&lt;/strong&gt; — is there a believable reason to open now?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your score is weak, the tool gives AI rewrite suggestions right there in Gmail, so you can improve the line without opening another tab or pasting your text into an external analyzer. That matters because convenience drives usage — web-based tools like CoSchedule or SubjectLine.com require you to leave Gmail, copy-paste your subject, and mentally carry the feedback back. By the time you switch tabs, you've lost momentum. An in-Gmail scorer removes that friction entirely.&lt;/p&gt;

&lt;p&gt;Free users get &lt;strong&gt;50 scores per month&lt;/strong&gt;, which is enough for many freelancers, job seekers, consultants, and light outreach workflows. &lt;strong&gt;Pro gives you unlimited scoring&lt;/strong&gt;, so if you are sending a lot of outbound email, you never have to ration checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  10 high-performing subject line templates
&lt;/h2&gt;

&lt;p&gt;Use these as starting points, not copy-and-paste magic bullets. Fill in the bracketed part with something real and relevant.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Quick question about [topic]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Idea for [company]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[Company] + [pain point]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Still working on [goal]?&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Before [event or deadline]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Question about your [process]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;For your [team or role]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worth trying for [company]?&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Regarding [specific initiative]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[Name], quick thought on [topic]&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A few notes on using templates well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Favor plain language over cleverness&lt;/li&gt;
&lt;li&gt;Choose the template based on the relationship: cold outreach, follow-up, job search, or client work&lt;/li&gt;
&lt;li&gt;Make the body deliver exactly what the template hints at&lt;/li&gt;
&lt;li&gt;If a template starts feeling generic, rewrite it in your own natural voice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Templates save time, but relevance gets replies.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a good reply rate for cold email?
&lt;/h3&gt;

&lt;p&gt;A solid benchmark is &lt;strong&gt;3-5% average reply rate&lt;/strong&gt;, according to Saleshandy's 2026 analysis of 53M+ cold emails. The strongest campaigns can reach &lt;strong&gt;10%+&lt;/strong&gt;, which is why improving your subject lines, targeting, and offer is worth the effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I optimize for opens or replies?
&lt;/h3&gt;

&lt;p&gt;Optimize for &lt;strong&gt;replies first&lt;/strong&gt;. Opens can still help with rough comparisons, but Apple Mail Privacy Protection made them less trustworthy, while a reply is a real signal that your message connected.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many subject lines should I test?
&lt;/h3&gt;

&lt;p&gt;Start with a small set of clear variations for any meaningful outreach campaign. That gives you enough contrast to learn what works without creating unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;If your subject line is too long, too generic, too pushy, or too spammy, the rest of your email never gets a fair chance. A better subject line will not fix a weak offer, but it will help good emails earn more of the replies they deserve.&lt;/p&gt;

&lt;p&gt;If you want an easy way to check subject lines as you write them, install &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/dleffnbdjohkmmkbojehdpkgkmpofmgm" rel="noopener noreferrer"&gt;EmailSubjectScore Pro&lt;/a&gt;&lt;/strong&gt;. It works directly inside Gmail, scores spam risk, clarity, and urgency in real time, includes AI rewrite suggestions, and gives you &lt;strong&gt;50 free scores per month&lt;/strong&gt; before you ever need Pro.&lt;/p&gt;

</description>
      <category>email</category>
      <category>gmail</category>
      <category>productivity</category>
      <category>coldemail</category>
    </item>
  </channel>
</rss>
