diff --git a/multisrc/overrides/madara/creepyscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/creepyscans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..1056a4758
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/creepyscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/creepyscans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..642ee2cc6
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/creepyscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/creepyscans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..58f471536
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/creepyscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/creepyscans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea2244a3f
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/creepyscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/creepyscans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2d8848d81
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madara/creepyscans/res/web_hi_res_512.png b/multisrc/overrides/madara/creepyscans/res/web_hi_res_512.png
new file mode 100644
index 000000000..6ac625b8b
Binary files /dev/null and b/multisrc/overrides/madara/creepyscans/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madara/creepyscans/src/CreepyScans.kt b/multisrc/overrides/madara/creepyscans/src/CreepyScans.kt
new file mode 100644
index 000000000..b5359f463
--- /dev/null
+++ b/multisrc/overrides/madara/creepyscans/src/CreepyScans.kt
@@ -0,0 +1,136 @@
+package eu.kanade.tachiyomi.extension.en.creepyscans
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.source.model.Filter
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.SChapter
+import okhttp3.CacheControl
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import org.jsoup.nodes.Document
+import java.util.concurrent.TimeUnit
+
+class CreepyScans : Madara(
+    "CreepyScans",
+    "https://creepyscans.com",
+    "en",
+) {
+
+    override val client: OkHttpClient = super.client.newBuilder()
+        .rateLimit(1, 3, TimeUnit.SECONDS)
+        .build()
+
+    override val useNewChapterEndpoint = true
+
+    // Popular
+
+    override fun popularMangaRequest(page: Int): Request {
+        return GET(
+            url = "$baseUrl/$mangaSubString/?m_orderby=views",
+            headers = headers,
+            cache = CacheControl.FORCE_NETWORK,
+        )
+    }
+
+    // Latest
+
+    override fun latestUpdatesRequest(page: Int): Request {
+        return GET(
+            url = "$baseUrl/$mangaSubString/?m_orderby=latest",
+            headers = headers,
+            cache = CacheControl.FORCE_NETWORK,
+        )
+    }
+
+    // Search
+
+    override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+        if (query.isNotBlank()) throw Exception("Search not available")
+
+        val url = "$baseUrl/$mangaSubString/".toHttpUrl().newBuilder()
+        filters.forEach { filter ->
+            when (filter) {
+                is OrderByFilter -> {
+                    if (filter.state != 0) {
+                        url.addQueryParameter("m_orderby", filter.toUriPart())
+                    }
+                }
+                is GenreFilter -> {
+                    val selected = filter.vals[filter.state].second
+                    if (selected.isNotBlank()) {
+                        url.removePathSegment(0)
+                        url.addPathSegment("manga-genre")
+                        url.addPathSegment(filter.vals[filter.state].second)
+                    }
+                }
+                else -> {}
+            }
+        }
+        return GET(url.build(), headers)
+    }
+
+    override fun searchMangaSelector(): String =
+        super.searchMangaSelector() + ",div.page-content-listing div.page-item-detail"
+
+    override fun searchMangaNextPageSelector(): String? = null
+
+    // Filter
+
+    override fun genresRequest(): Request {
+        return GET("$baseUrl/$mangaSubString/?genres=", headers)
+    }
+
+    override fun parseGenres(document: Document): List<Genre> {
+        genresList = document.select(".list-unstyled li").mapNotNull { genre ->
+            genre.selectFirst("a[href]")?.let {
+                val slug = it.attr("href")
+                    .split("/")
+                    .last(String::isNotEmpty)
+
+                Pair(it.ownText().trim(), slug)
+            }
+        }
+
+        return emptyList()
+    }
+
+    // From manga18fx
+    private var genresList: List<Pair<String, String>> = emptyList()
+
+    class GenreFilter(val vals: List<Pair<String, String>>) :
+        Filter.Select<String>("Genre", vals.map { it.first }.toTypedArray())
+
+    override fun getFilterList(): FilterList {
+        val filters = buildList(4) {
+            add(
+                OrderByFilter(
+                    title = orderByFilterTitle,
+                    options = orderByFilterOptions.zip(orderByFilterOptionsValues),
+                    state = 0,
+                ),
+            )
+            add(Filter.Separator())
+            add(Filter.Header("Filters are ignored for text search!"))
+
+            if (genresList.isNotEmpty()) {
+                add(GenreFilter(listOf(Pair("<select>", "")) + genresList))
+            } else {
+                add(Filter.Header("Wait for mangas to load then tap Reset"))
+            }
+        }
+
+        return FilterList(filters)
+    }
+
+    // Page list
+
+    override fun pageListRequest(chapter: SChapter): Request {
+        if (chapter.url.startsWith("http")) {
+            return GET(chapter.url.substringBefore("?style=list"), headers)
+        }
+        return super.pageListRequest(chapter)
+    }
+}
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
index 849414d92..7ad1481ca 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt
@@ -81,6 +81,7 @@ class MadaraGenerator : ThemeSourceGenerator {
         SingleLang("Comicz.net v2", "https://v2.comiz.net", "all", isNsfw = true, className = "ComiczNetV2"),
         SingleLang("Cookie Kiara", "https://18.kiara.cool", "en", isNsfw = true),
         SingleLang("CopyPasteScan", "https://copypastescan.xyz", "es", overrideVersionCode = 1),
+        SingleLang("CreepyScans", "https://creepyscans.com", "en"),
         SingleLang("DapRob", "https://daprob.com", "es"),
         SingleLang("Dark Scans", "https://darkscans.com", "en", overrideVersionCode = 1),
         SingleLang("Decadence Scans", "https://reader.decadencescans.com", "en", isNsfw = true, overrideVersionCode = 2),