---
id: kickasstorrents-ws
replaces:
  - kickasstorrent-kathow
name: kickasstorrents.ws
description: "kickasstorrents.ws is a Public KickAssTorrent clone for MOVIES / TV / GENERAL"
language: en-US
type: public
encoding: UTF-8
links:
  - https://kickass.ws/
  - https://kickasstorrents.bz/
  - https://kkickass.com/
  - https://kkat.net/
  - https://kick4ss.com/
  - https://kickasst.net/
  - https://kickasstorrents.id/
  - https://thekat.cc/
  - https://kattracker.com/
legacylinks:
  - https://kickass.gg/
  - https://katcr.io/
  - https://thekat.nz/
  - https://thekat.se/
  - https://kat.how/
  - https://kat.li/
  - https://katcr.to/ # kickasstorrents-to proxy
  - https://kickasstorrent.cr/ # kickasstorrents-to proxy
  - https://kickasstorrents.unblockninja.com/ # currently kickasstorrents-to proxy
  - https://kickass-kat.com/
  - https://kickass.sh/
  - https://kickasshydra.dev/

caps:
  categorymappings:
    - {id: applications, cat: PC, desc: Apps}
    - {id: books, cat: Books, desc: Books}
    - {id: games, cat: Console, desc: Games}
    - {id: movies, cat: Movies, desc: Movies}
    - {id: music, cat: Audio, desc: Music}
    - {id: other, cat: Other, desc: Other}
    - {id: tv, cat: TV, desc: TV}
    - {id: xxx, cat: XXX, desc: XXX}

  modes:
    search: [q]
    tv-search: [q, season, ep]
    movie-search: [q]
    music-search: [q]
    book-search: [q]

settings:
  - name: sort
    type: select
    label: Sort requested from site
    default: time_add
    options:
      time_add: created
      seeders: seeders
      size: size
  - name: type
    type: select
    label: Order requested from site
    default: desc
    options:
      desc: desc
      asc: asc

search:
  paths:
    - path: "{{ if .Keywords }}usearch/{{ .Keywords }}/{{ else }}new/{{ end }}?field={{ .Config.sort }}&sorder={{ .Config.type }}"

  headers:
    User-Agent: ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"]

  rows:
    selector: table.data tr[id]:has(a[data-download])

  fields:
    category_optional:
      selector: span[id^="cat_"] > strong > a
      attribute: href
      optional: true
      filters:
        - name: tolower
        - name: trim
          args: /
    category:
      text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}other{{ end }}"
    title:
      selector: a[class="cellMainLink"]
    details:
      selector: a[class="cellMainLink"]
      attribute: href
    download:
      # the official site delivers mylink so we skip to the magnet URI
      selector: td:nth-child(1) > div > a[data-download]
      attribute: href
      filters:
        - name: querystring
          args: url
    size:
      selector: td:nth-child(2)
    date:
      selector: td:nth-child(3)
      filters:
        - name: timeago
    seeders:
      selector: td:nth-child(4)
      filters:
        - name: replace
          args: ["N/A", 0]
    leechers:
      selector: td:nth-child(5)
      filters:
        - name: replace
          args: ["N/A", 0]
    downloadvolumefactor:
      text: 0
    uploadvolumefactor:
      text: 1
# engine n/a
