diff --git a/lib/federation/activity_stream/converter/post.ex b/lib/federation/activity_stream/converter/post.ex
index f8d23c7ce..4f09c4285 100644
--- a/lib/federation/activity_stream/converter/post.ex
+++ b/lib/federation/activity_stream/converter/post.ex
@@ -65,10 +65,11 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do
   @impl Converter
   @spec as_to_model_data(map) :: {:ok, map} | {:error, any()}
   def as_to_model_data(
-        %{"type" => "Article", "actor" => creator, "attributedTo" => group} = object
+        %{"type" => "Article", "actor" => creator, "attributedTo" => group_uri} = object
       ) do
-    with {:ok, %Actor{id: attributed_to_id}} <- get_actor(group),
+    with {:ok, %Actor{id: attributed_to_id} = group} <- get_actor(group_uri),
          {:ok, %Actor{id: author_id}} <- get_actor(creator),
+         {:visibility, visibility} <- {:visibility, get_visibility(object, group)},
          [description: description, picture_id: picture_id, medias: medias] <-
            process_pictures(object, attributed_to_id) do
       %{
@@ -81,6 +82,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do
         publish_at: object["published"],
         picture_id: picture_id,
         medias: medias,
+        visibility: visibility,
         draft: object["draft"] == true
       }
     else
@@ -128,4 +130,17 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Post do
       &(&1 ++ medias)
     )
   end
+
+  @ap_public "https://www.w3.org/ns/activitystreams#Public"
+
+  defp get_visibility(%{"to" => to}, %Actor{
+         followers_url: followers_url,
+         members_url: members_url
+       }) do
+    cond do
+      @ap_public in to -> :public
+      followers_url in to -> :unlisted
+      members_url in to -> :private
+    end
+  end
 end