#+title: Work for robots #+PROPERTY: header-args:sqlite :db /scratch/titan/apache2/cgit-logs.sqlite :colnames yes #+PROPERTY: header-args :exports both :cache yes :eval no-export #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: I self-host my website to keep sovereignty and independence from large Internet corporations. I don't have at the moment any analytics tool on this site. However, some of my git repositories are also self-hosted, and there I have access to the =Apache= logs. With all the =AI-hype= and coding assistants, I wanted to have a look at how of my =software= are those AI companies taking. Analyzing my log files in the period from =2024-12-31 23:00:35= till =2025-04-20 00:38:24= I'm surprised to see how dumb those AI companies are in the use of their web crawlers. Table [[top-users]] shows the top /users/ of my git repository. The leading AI companies =OpenAI= and =Anthropic= with their respective bots =GPTBot= and =ClaudeBot= simply dominate. I found it unbelievable that they could extract about =≈7GiB= of data. That is a lot of Bandwidth out of my server for a few git repositories and in a lightweight web interphase. #+begin_src sqlite :exports results --SELECT --count(*) AS Requests, --round(total (length) / 1024 / 1024, 1) "Tx MiB", ----0, --'Everybody else' AS "User Agent" --FROM --logs --WHERE --agentid NOT IN (143, 1, 19, 6, 4602, 3, 2, 4, 10306, 9) --AND path NOT LIKE '/ingrid/%' --UNION SELECT count(*) AS Requests, round(total (length) / 1024 / 1024, 1) "Tx MiB", --agentid, user_agent AS "User Agent" FROM logs JOIN agent ON agent.id = logs.agentid WHERE path NOT LIKE '/ingrid/%' GROUP BY agentid ORDER BY 2 DESC LIMIT 10 #+end_src #+name: top-users #+caption: Top 10 /users/ as self-identified by their /User Agent/ to the server #+RESULTS[36d7b647efa39c3af86581279748a2bb53d034f3]: | Requests | Tx MiB | User Agent | |----------+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 3572480 | 8819.6 | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | 1617262 | 6766.3 | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | 273968 | 721.4 | Mozilla/5.0 (compatible; Barkrowler/0.9; +https://babbar.tech/crawler) | | 80159 | 498.3 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 | | 207771 | 475.8 | Scrapy/2.11.2 (+https://scrapy.org) | | 69697 | 466.1 | Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot) | | 59832 | 416.4 | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | | 14142 | 83.3 | Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; spider-feedback@bytedance.com) | | 2500 | 53.7 | Mozilla/5.0 (compatible; SeekportBot; +https://bot.seekport.com) | | 3578 | 30.9 | Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.7049.52 Mobile Safari/537.36 (compatible; GoogleOther) | #+begin_src sqlite :results value file :file top_agent_traffic.csv :exports none SELECT date / 14400 * 14400 AS time, -- 4h bin count(*) AS requests, total (length) FILTER (WHERE agentid = 143) AS "OpenAI-GPTBot", total (length) FILTER (WHERE agentid = 1) AS "ClaudeBot", total (length) FILTER (WHERE agentid = 19) AS "Barkrowler", total (length) FILTER (WHERE agentid = 6) AS "Macintosh", total (length) FILTER (WHERE agentid = 4602) AS "Scrapy", total (length) FILTER (WHERE agentid = 3) AS "PetalBot", total (length) FILTER (WHERE agentid = 2) AS "AhrefsBot", total (length) FILTER (WHERE agentid = 4) AS "Bytespider", total (length) FILTER (WHERE agentid = 10306) AS "SeekportBot", total (length) FILTER (WHERE agentid = 9) AS "Google", total (length) FILTER (WHERE agentid not in (143, 1, 19, 6, 4602, 3, 2, 4, 10306, 9)) AS "Rest" FROM logs WHERE path NOT LIKE '/ingrid/%' AND date NOT NULL GROUP BY time #+end_src #+RESULTS[87f78b2de4d43785f81e682925c6b6542d794883]: [[file:top_agent_traffic.csv]] This is reviewed in figure [[fig:agent-traffic]] #+attr_html: :id agent-traffic #+CAPTION: Example of the process #+NAME: fig:agent-traffic [[./jsfill.png]] #+caption: Caption shared by both figures #+begin_quote teusta sat #+end_quote following theorem [[th:theproc]] #+CAPTION: Example of the process #+NAME: th:theproc #+attr_html: :style display:flex; :id fun #+begin_theorem If an integer $n$ is greater than 2, then the equation $a^n + b^n = c^n$ has no solutions in non-zero integers $a$, $b$, and $c$. #+end_theorem look fig [[figblo]] #+NAME: figblo #+attr_html: :class tusi figblo #+CAPTION: fun block #+begin_figure satore #+end_figure #+begin_src sqlite SELECT round(total (length) / 1024, 2) "tx KiB", count(*) hits, agentid, user_agent FROM logs JOIN agent ON agentid = id --where agentid in ( --select id from agent WHERE user_agent LIKE '%google%' --) GROUP BY id ORDER BY 1 DESC #+end_src #+begin_src sqlite SELECT --agent.id, user_agent as "User Agent", count(*) AS hits, round(total (length) / 1024, 1) AS "tx KiB" FROM logs JOIN agent ON logs.agentid = agent.id WHERE user_agent LIKE '%git%' and id != 10897 GROUP BY user_agent order by total(length) desc #+end_src #+RESULTS[333fcbc738819c497f14b4445a3b45f391f0db7e]: | User Agent | hits | tx KiB | |----------------------------------------------------------------------------------+------+---------| | git/2.40.3 | 1075 | 12821.3 | | git/2.34.1 | 1149 | 3687.1 | | Software Heritage dumb Git loader | 337 | 2533.6 | | git/2.48.1 | 115 | 1908.6 | | Software Heritage cgit lister v6.9.3 (+https://www.softwareheritage.org/contact) | 8 | 21.3 | | Software Heritage cgit lister v6.9.2 (+https://www.softwareheritage.org/contact) | 8 | 21.0 | | git/dulwich/0.22.7 | 2 | 8.5 | | git/dulwich/0.22.6 | 1 | 4.2 | |----------------------------------------------------------------------------------+------+---------| | Total | 2695 | 21005.6 | #+begin_src sqlite SELECT status, count(*) as hits, round(total (length) / 1024 / 1024, 2) as "tx MB" -- round(total (total (length)) OVER (PARTITION BY status / 100) / 1024 / 1024, 2) AS "total tx MB" FROM logs GROUP BY "status" order by "tx MB" desc #+end_src #+RESULTS[6e8a6986b881fbf55f5e1328d505eb280c73f3b0]: | status | hits | tx MB | |--------+---------+----------| | 200 | 4255831 | 13463.72 | | 404 | 422650 | 1617.18 | | 400 | 3087 | 3.89 | | 500 | 790 | 1.37 | | 302 | 202 | 0.5 | | 304 | 240 | 0.3 | | 206 | 297 | 0.26 | | 403 | 29 | 0.11 | | 301 | 23 | 0.08 | | | 90 | 0.06 | | 421 | 7 | 0.03 | | 408 | 3 | 0.01 | #+begin_src sqlite SELECT count(*), count(distinct ipid), count(distinct agentid), total (length), request_method, -- status, substr(path, 0, 50) FROM logs WHERE path NOT LIKE '/ingrid/%' AND status = 200 GROUP BY path ORDER BY 1 DESC LIMIT 15 #+end_src #+RESULTS[8469c661009196d66d76364873866923b89c8205]: | count(*) | count(distinct ipid) | count(distinct agentid) | total (length) | request_method | substr(path, 0, 50) | |----------+----------------------+-------------------------+----------------+----------------+---------------------------------| | 3540 | 1779 | 425 | 22903047.0 | GET | / | | 2171 | 1563 | 48 | 9744532.0 | GET | /robots.txt | | 855 | 518 | 50 | 4234481.0 | GET | /favicon.ico | | 334 | 262 | 31 | 1304042.0 | GET | /cgit.css | | 150 | 116 | 59 | 1030405.0 | GET | /hugo-minimalist-theme/about/ | | 144 | 1 | 1 | 854165.0 | GET | /?XDEBUG_SESSION_START=phpstorm | | 119 | 69 | 52 | 421470.0 | GET | /cgit.png | | 98 | 36 | 14 | 330051.0 | GET | /hugo-minimalist-theme/ | | 46 | 31 | 15 | 165446.0 | GET | /homepage/ | | 42 | 32 | 13 | 157112.0 | GET | /dotfiles/ | | 39 | 34 | 14 | 255204.0 | GET | /hugo-minimalist-theme/log/ | | 37 | 30 | 13 | 132913.0 | GET | /hugo-minimalist-theme/tree/ | | 37 | 33 | 11 | 103541.0 | GET | /?s=name | | 36 | 33 | 12 | 242095.0 | GET | /dotfiles/log/ | | 35 | 32 | 14 | 124829.0 | GET | /dotfiles/tree/ | #+begin_src sqlite SELECT count(*) as hits, sum(length), agentid, path --substr(path, 0, 50) FROM logs WHERE path NOT LIKE '/ingrid/%' AND status = 404 GROUP BY path ORDER BY hits desc limit 10 #+end_src #+RESULTS[3dbf9422fb49ecb2cae63c67615825ef1b1c30a9]: | hits | sum(length) | agentid | path | | |------+-------------+---------+-------------------------------------------------------------------------------------+--------------------| | 2815 | 8768239 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.RelPermalink%20%7D%7D | | | 1643 | 5653820 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | | | 1564 | 5049557 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.%20%7D%7D | | | 1218 | 4488059 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$href%20%7D%7D | | | 1077 | 3930371 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.Permalink%20%7D%7D | | | 924 | 3522501 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Next.URL%20%7D%7D | | | 919 | 3500841 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Prev.URL%20%7D%7D | | | 818 | 3088624 | 143 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20if%20ne%20.MediaType.SubType | | | 807 | 2530428 | 143 | /hugo-minimalist-theme/plain/layouts/%7B%7B%20.Type%20%7D%7D | | | 750 | 3000020 | 143 | /hugo-minimalist-theme/plain/layouts/taxonomy/%7B%7B%20.Name%20 | %20urlize%20%7D%7D | #+begin_src sqlite :results value file :file fails.csv SELECT count(*) as hits, sum(length), path --substr(path, 0, 50) FROM logs WHERE path NOT LIKE '/ingrid/%' AND status = 404 GROUP BY path ORDER BY hits desc, path limit 550 #+end_src #+RESULTS[28ba3f6de596e93fd80baf9516e5ae32a8239c72]: [[file:fails.csv]] #+begin_src sqlite select count(*), sum(length), path,user_agent from logs join agent on agentid=id WHERE path NOT LIKE '/ingrid/%' AND status = 404 group by path, agentid ORDER BY sum(count(*)) over (partition by path) desc, 1 desc, path, agentid limit 50 #+end_src #+RESULTS[cb18bd88215d0873626e54f3a56ea4b6851c4138]: | count(*) | sum(length) | path | user_agent | | |----------+-------------+-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------| | 2805 | 8732358 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.RelPermalink%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 7 | 18923 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.RelPermalink%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 3 | 16958 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.RelPermalink%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 1629 | 5597913 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 7 | 25024 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 3 | 8467 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | AliyunSecBot/Aliyun (AliyunSecBot@service.alibaba.com) | | | 1 | 2655 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 1 | 6609 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Mozilla/5.0 (Macintosh; PPC Mac OS X 10_7_9 rv:3.0; mt-MT) AppleWebKit/532.12.1 (KHTML, like Gecko) Version/5.0.3 Safari/532.12.1 | | | 1 | 6609 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Mozilla/5.0 (X11; Linux i686; rv:1.9.6.20) Gecko/8855-02-04 23:24:49.455231 Firefox/3.6.10 | | | 1 | 6543 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.URL%20%7D%7D | Opera/9.30.(X11; Linux x86_64; tn-ZA) Presto/2.9.175 Version/11.00 | | | 1559 | 5018667 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 4 | 23869 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 1 | 7021 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 1209 | 4437078 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$href%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 5 | 27298 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$href%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 4 | 23683 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$href%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 1060 | 3867072 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.Permalink%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 12 | 41170 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.Permalink%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 3 | 8087 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.Permalink%20%7D%7D | AliyunSecBot/Aliyun (AliyunSecBot@service.alibaba.com) | | | 2 | 14042 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.Permalink%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 916 | 3490491 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Next.URL%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 7 | 29355 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Next.URL%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 1 | 2655 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Next.URL%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 912 | 3471446 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Prev.URL%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 7 | 29395 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20$pag.Prev.URL%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 817 | 3081643 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20if%20ne%20.MediaType.SubType | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 1 | 6981 | /hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20if%20ne%20.MediaType.SubType | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 798 | 2487903 | /hugo-minimalist-theme/plain/layouts/%7B%7B%20.Type%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | | 5 | 26298 | /hugo-minimalist-theme/plain/layouts/%7B%7B%20.Type%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | | 4 | 16227 | /hugo-minimalist-theme/plain/layouts/%7B%7B%20.Type%20%7D%7D | Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com) | | | 745 | 2977378 | /hugo-minimalist-theme/plain/layouts/taxonomy/%7B%7B%20.Name%20 | %20urlize%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | | 5 | 22642 | /hugo-minimalist-theme/plain/layouts/taxonomy/%7B%7B%20.Name%20 | %20urlize%20%7D%7D | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | | 65 | 348406 | /.env | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0 | | | 63 | 310359 | /.env | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 | | | 58 | 310754 | /.env | Mozilla/5.0 (Linux; U; Android 4.4.2; en-US; HM NOTE 1W Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.0.5.850 U3/0.8.0 Mobile Safari/534.30 | | | 52 | 301380 | /.env | l9explore/1.2.2 | | | 22 | 111334 | /.env | Go-http-client/1.1 | | | 18 | 38352 | /.env | - | | | 16 | 85808 | /.env | python-requests/2.32.3 | | | 16 | 36940 | /.env | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 | | | 9 | 52245 | /.env | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0 abuse.xmco.fr | | | 9 | 48190 | /.env | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50 | | | 8 | 42840 | /.env | python-requests/2.26.0 | | | 6 | 32086 | /.env | python-requests/2.31.0 | | | 5 | 26773 | /.env | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 | | | 3 | 8719 | /.env | Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1 | | | 3 | 16043 | /.env | python-httpx/0.28.1 | | | 3 | 17375 | /.env | Mozilla/5.0 (Linux; Android 9; Redmi Note 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.89 Mobile Safari/537.36 | | | 3 | 17375 | /.env | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0 | | | 3 | 16139 | /.env | python-requests/2.27.1 | | #+begin_src sqlite :results value file :file leadfail.csv SELECT datetime (date, 'unixepoch'), status, count(*) as hits, round(sum(length) / 1024, 2) as KB, user_agent FROM logs JOIN agent ON agent.id = logs.agentid WHERE path = '/hugo-minimalist-theme/plain/layouts/partials/%7B%7B%20.RelPermalink%20%7D%7D' group by agentid ORDER BY referrer #+end_src #+RESULTS[e3501152f1ec3e7ff822a6713736ff35fb0dcb46]: [[file:leadfail.csv]]