diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index 97b3aa90..dad3b9bd 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -85,6 +85,12 @@ Consider all listed sites to potentially be NSFW.
Posts, Tag Searches
+
+
AHottie
+
https://ahottie.top/
+
Galleries, Search Results, Tag Searches
+
+
Arcalive
https://arca.live/
diff --git a/gallery_dl/extractor/__init__.py b/gallery_dl/extractor/__init__.py
index 64134d01..6f2cb69a 100644
--- a/gallery_dl/extractor/__init__.py
+++ b/gallery_dl/extractor/__init__.py
@@ -23,6 +23,7 @@ modules = [
"8muses",
"adultempire",
"agnph",
+ "ahottie",
"ao3",
"arcalive",
"architizer",
diff --git a/gallery_dl/extractor/ahottie.py b/gallery_dl/extractor/ahottie.py
new file mode 100644
index 00000000..f8db0d4c
--- /dev/null
+++ b/gallery_dl/extractor/ahottie.py
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2025 Mike Fährmann
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+
+"""Extractors for https://ahottie.top/"""
+
+from .common import Extractor, GalleryExtractor, Message
+from .. import text
+
+BASE_PATTERN = r"(?:https?://)?(?:www\.)?ahottie\.top"
+
+
+class AhottieExtractor(Extractor):
+ """Base class for ahottie extractors"""
+ category = "ahottie"
+ root = "https://ahottie.top"
+
+ def items(self):
+ for album in self.albums():
+ yield Message.Queue, album["url"], album
+
+ def _pagination(self, url, params):
+ params["page"] = text.parse_int(params.get("page"), 1)
+
+ while True:
+ page = self.request(url, params=params).text
+
+ for album in text.extract_iter(
+ page, '