diff --git a/retribute_api/search/sources.py b/retribute_api/search/sources.py
index 1ba18943b130495c2f74be6e82ca4efb1f31096a..c7b6724a43e5f896069e1c751b694afc3dd1fa27 100644
--- a/retribute_api/search/sources.py
+++ b/retribute_api/search/sources.py
@@ -115,8 +115,20 @@ def result_to_retribute_profile(lookup_type, lookup, data):
     valid_means = list(filter(lambda v: v[1] is not None, valid_means))
     if not valid_means:
         raise exceptions.MeansNotFound()
+
+    # remove possible duplicates
+    deduplicated_means = []
+    handled = []
+    for mean in valid_means:
+        id = (mean[1]["provider"], mean[1]["id"])
+        if id in handled:
+            # avoid duplicates
+            continue
+        deduplicated_means.append(mean)
+        handled.append(id)
+
     final_means = []
-    for i, mean in enumerate(reversed(valid_means)):
+    for i, mean in enumerate(reversed(deduplicated_means)):
         link_data = mean[0]
         mean_data = mean[1]
         mean_data.setdefault("weight", i)
diff --git a/tests/search/test_sources.py b/tests/search/test_sources.py
index 26d124f976951a9f4d62988a09cca7ed233ae79d..8131f64f16c64609c7bcf1e17b619d9c20f717fc 100644
--- a/tests/search/test_sources.py
+++ b/tests/search/test_sources.py
@@ -172,3 +172,37 @@ def test_source_result_to_retribute_profile(settings, now):
 
     result = sources.result_to_retribute_profile(lookup_type, lookup, data)
     assert result == expected
+
+
+def test_source_result_to_retribute_profile_removes_duplicates(settings, now):
+    settings.BASE_URL = "https://retribute.me.test"
+
+    lookup_type = "webfinger"
+    lookup = "test@domain.test"
+
+    data = {
+        "links": [
+            {"summary": "Patreon", "url": "https://patreon.com/username"},
+            {"summary": "Duplicate Patreon", "url": "https://patreon.com/username"},
+        ]
+    }
+
+    expected = {
+        "version": "0.1",
+        "id": "https://retribute.me.test/compat/{}:{}".format(lookup_type, lookup),
+        "title": "Compat profile for {}:{}".format(lookup_type, lookup),
+        "updated": now.isoformat(),
+        "identities": [],
+        "means": [
+            {
+                "provider": "patreon",
+                "id": "username",
+                "summary": "Patreon",
+                "weight": 0,
+                "url": "https://patreon.com/username",
+            }
+        ],
+    }
+
+    result = sources.result_to_retribute_profile(lookup_type, lookup, data)
+    assert result == expected