diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index 71ec3701..e881d7c1 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -457,6 +457,12 @@ Consider all listed sites to potentially be NSFW.
Galleries, individual Images |
|
+
+ | imgpile |
+ https://imgpile.com/ |
+ Posts, User Profiles |
+ |
+
| imgth |
https://imgth.com/ |
diff --git a/gallery_dl/extractor/__init__.py b/gallery_dl/extractor/__init__.py
index b32fcd11..ef663a35 100644
--- a/gallery_dl/extractor/__init__.py
+++ b/gallery_dl/extractor/__init__.py
@@ -88,6 +88,7 @@ modules = [
"imagefap",
"imgbb",
"imgbox",
+ "imgpile",
"imgth",
"imgur",
"imhentai",
diff --git a/gallery_dl/extractor/imgpile.py b/gallery_dl/extractor/imgpile.py
new file mode 100644
index 00000000..9fc3a9c6
--- /dev/null
+++ b/gallery_dl/extractor/imgpile.py
@@ -0,0 +1,119 @@
+# -*- 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://imgpile.com/"""
+
+from .common import Extractor, Message
+from .. import text
+
+BASE_PATTERN = r"(?:https?://)?(?:www\.)?imgpile\.com"
+
+
+class ImgpileExtractor(Extractor):
+ """Base class for imgpile extractors"""
+ category = "imgpile"
+ root = "https://imgpile.com"
+ directory_fmt = ("{category}", "{post[author]}",
+ "{post[title]} ({post[id_slug]})")
+ archive_fmt = "{post[id_slug]}_{id}"
+
+ def items(self):
+ pass
+
+
+class ImgpilePostExtractor(ImgpileExtractor):
+ subcategory = "post"
+ pattern = rf"{BASE_PATTERN}/p/(\w+)"
+ example = "https://imgpile.com/p/AbCdEfG"
+
+ def items(self):
+ post_id = self.groups[0]
+ url = f"{self.root}/p/{post_id}"
+ page = self.request(url).text
+ extr = text.extract_from(page)
+
+ post = {
+ "id_slug": post_id,
+ "title" : text.unescape(extr("", " - imgpile<")),
+ "id" : text.parse_int(extr('data-post-id="', '"')),
+ "author" : extr('/u/', '"'),
+ "score" : text.parse_int(text.remove_html(extr(
+ 'class="post-score">', ""))),
+ "views" : text.parse_int(extr(
+ 'class="meta-value">', "<").replace(",", "")),
+ "tags" : text.split_html(extr(
+ " ", '