diff --git a/lib/plausible/auth/user.ex b/lib/plausible/auth/user.ex
index 5c0fe34cc37cd3c54eacbc287fb949c19c58eef5..bfb3eafd27e6234bb36c9769953c3c8b6ed5f3fe 100644
--- a/lib/plausible/auth/user.ex
+++ b/lib/plausible/auth/user.ex
@@ -17,6 +17,7 @@ defmodule Plausible.Auth.User do
     field :name, :string
     field :last_seen, :naive_datetime
     field :trial_expiry_date, :date
+    field :grace_period_end, :date
     field :theme, :string
     field :email_verified, :boolean
 
@@ -79,6 +80,10 @@ defmodule Plausible.Auth.User do
     change(user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1))
   end
 
+  def start_grace_period(user) do
+    change(user, grace_period_end: Timex.today() |> Timex.shift(days: 7))
+  end
+
   defp trial_expiry() do
     if Application.get_env(:plausible, :is_selfhost) do
       Timex.today() |> Timex.shift(years: 100)
diff --git a/lib/plausible_web/templates/email/over_limit.html.eex b/lib/plausible_web/templates/email/over_limit.html.eex
index 4fa5ba502ac8aed30337d491e83960af04d8a219..a05db28a1a04e41c2ef08fc0e89c6dfe5c382cd6 100644
--- a/lib/plausible_web/templates/email/over_limit.html.eex
+++ b/lib/plausible_web/templates/email/over_limit.html.eex
@@ -2,9 +2,9 @@ Hey <%= user_salutation(@user) %>,
 <br /><br />
 Thanks for being a Plausible Analytics subscriber!
 <br /><br />
-This is a friendly reminder that your traffic has exceeded your subscription tier two months in a row. Congrats on all that traffic!
+This is a notice that your traffic has exceeded your subscription tier two months in a row. Congrats on all that traffic!
 <br /><br />
-We don't enforce any hard limits at the moment, we're still counting your stats and you have access to your dashboard, but we kindly ask you to upgrade your subscription plan to accommodate your new traffic levels.
+In order to keep your stats running, we require you to upgrade your account to accommodate your new traffic levels. If you do not upgrade your account within the next 7 days, we will lock your sites and they won't be accessible.
 <br /><br />
 In the last billing cycle (<%= date_format(@last_cycle.first) %> to <%= date_format(@last_cycle.last) %>), your account has used <%= PlausibleWeb.StatsView.large_number_format(@usage) %> billable pageviews.
 <%= if @usage <= 20_000_000 do %>
@@ -17,8 +17,6 @@ You can upgrade your subscription using our self-serve platform. The new charge
 This is more than our standard plans, so please reply back to this email to get a quote for your volume.
 <% end %>
 <br /><br />
-Were the last two months extraordinary and you don't expect these higher traffic levels to continue? Reply to this email and we'll figure it out.
-<br /><br />
 Have questions or need help with anything? Just reply to this email and we'll gladly help.
 <br /><br />
 Thanks again for using our product and for your support!
diff --git a/lib/workers/check_usage.ex b/lib/workers/check_usage.ex
index 6de1d8027e59960ce287fbddfb27dac2f22fac23..41abcb2b7f6a2e2f6384d5efed1b82957c3d5414 100644
--- a/lib/workers/check_usage.ex
+++ b/lib/workers/check_usage.ex
@@ -96,6 +96,7 @@ defmodule Plausible.Workers.CheckUsage do
           )
 
         Plausible.Mailer.send_email_safe(template)
+        Plausible.Auth.User.start_grace_period(subscriber) |> Repo.update()
 
       _ ->
         nil
diff --git a/priv/repo/migrations/20211028122202_grace_period_end.exs b/priv/repo/migrations/20211028122202_grace_period_end.exs
new file mode 100644
index 0000000000000000000000000000000000000000..c0b6a64cadb15a97e29b8337b7eb5ce3881cedba
--- /dev/null
+++ b/priv/repo/migrations/20211028122202_grace_period_end.exs
@@ -0,0 +1,9 @@
+defmodule Plausible.Repo.Migrations.GracePeriodEnd do
+  use Ecto.Migration
+
+  def change do
+    alter table(:users) do
+      add :grace_period_end, :date
+    end
+  end
+end
diff --git a/test/workers/check_usage_test.exs b/test/workers/check_usage_test.exs
index 833593da3c54b77b6b4f44120cedce39a546bbc4..fa92f4662f8f9dcd0c1bb4f8afbe76178821d9a8 100644
--- a/test/workers/check_usage_test.exs
+++ b/test/workers/check_usage_test.exs
@@ -24,6 +24,7 @@ defmodule Plausible.Workers.CheckUsageTest do
     CheckUsage.perform(nil)
 
     assert_no_emails_delivered()
+    assert Repo.reload(user).grace_period_end == nil
   end
 
   test "does not send an email if account has been over the limit for one billing month", %{
@@ -45,6 +46,7 @@ defmodule Plausible.Workers.CheckUsageTest do
     CheckUsage.perform(nil, billing_stub)
 
     assert_no_emails_delivered()
+    assert Repo.reload(user).grace_period_end == nil
   end
 
   test "sends an email when an account is over their limit for two consecutive billing months", %{
@@ -69,6 +71,8 @@ defmodule Plausible.Workers.CheckUsageTest do
       to: [user],
       subject: "You have outgrown your Plausible subscription tier"
     )
+
+    assert Repo.reload(user).grace_period_end == Timex.shift(Timex.today(), days: 7)
   end
 
   describe "enterprise customers" do