diff --git a/retribute_api/providers.py b/retribute_api/providers.py
index ebb3069482483c4a087bca8e501de997da43d50a..61d1c213fb4d8f283cdfdca8751ef7a99bc3ead3 100644
--- a/retribute_api/providers.py
+++ b/retribute_api/providers.py
@@ -112,6 +112,15 @@ class OpenCollective(BasicUsernameInPathProvider):
     domain_regex = r"^(\w+\.)*opencollective\.com"
 
 
+@registry.register
+class Etsy(BasicUsernameInPathProvider):
+    id = "etsy"
+    label = "Etsy"
+    url = "https://etsy.com"
+    domain_regex = r"^(\w+\.)*etsy\.com"
+    username_regex = r"^\/[a-zA-Z-_]+/shop/([\w\.]+)/?$"
+
+
 @registry.register
 class BandCamp(BasicUsernameInDomainProvider):
     id = "bandcamp"
diff --git a/tests/search/test_means.py b/tests/search/test_means.py
index 0a3db70bbd8bff99a8a79b3e50262298656f3e29..fffa4f980ad05a657be5fdfd80a92f9fb0d454fc 100644
--- a/tests/search/test_means.py
+++ b/tests/search/test_means.py
@@ -13,6 +13,10 @@ from retribute_api.search import means
         ("https://paypal.me/username", {"provider": "paypal", "id": "username"}),
         ("https://www.paypal.me/username", {"provider": "paypal", "id": "username"}),
         ("https://fr.tipeee.com/username", {"provider": "tipeee", "id": "username"}),
+        (
+            "https://www.etsy.com/fr_CA/shop/xxPETRICHORxx",
+            {"provider": "etsy", "id": "xxPETRICHORxx"},
+        ),
         ("https://tipeee.com/username", {"provider": "tipeee", "id": "username"}),
         (
             "https://custom.com/username?retribute",