{"id":77155,"date":"2026-01-02T16:19:00","date_gmt":"2026-01-02T10:49:00","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=77155"},"modified":"2026-01-02T18:13:35","modified_gmt":"2026-01-02T12:43:35","slug":"exploring-agentic-ai-for-automation","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/exploring-agentic-ai-for-automation\/","title":{"rendered":"Exploring Agentic AI for Automation"},"content":{"rendered":"<p>The other day, my client asked for something that sounded simple at first &#8211; he wanted an alert in his inbox whenever the date changed on a specific website.<br \/>\nAnd, of course, the first thought that came to my mind was: \u201cYes, that\u2019s doable with Python!\u201d<br \/>\nBecause that\u2019s what I have always done in my analytics journey &#8211; write code to automate stuff.<\/p>\n<p>So I rolled up my sleeves and started working on it. The plan was straightforward: check if the website had any security or login requirements, scrape the latest date, compare it with the previous one, and email myself if it changed.<\/p>\n<p>Since I couldn\u2019t expose my Gmail password, I had to create an OAuth token for sending the alert email securely &#8211; a small but necessary step. And yes, after a few tweaks, the code worked perfectly.<\/p>\n<pre style=\"padding-left: 40px;\"><em>import os<\/em>\r\n<em>import json<\/em>\r\n<em>import smtplib<\/em>\r\n<em>import re<\/em>\r\n<em>import cloudscraper<\/em>\r\n<em>import re<\/em>\r\n<em>from bs4 import BeautifulSoup<\/em>\r\n<em>from datetime import datetime<\/em>\r\n<em>from email.mime.text import MIMEText<\/em>\r\n<em>from selenium import webdriver<\/em>\r\n<em>from selenium.webdriver.chrome.service import Service<\/em>\r\n<em>from selenium.webdriver.common.by import By<\/em>\r\n<em>from selenium.webdriver.support.ui import WebDriverWait<\/em>\r\n<em>from selenium.webdriver.support import expected_conditions as EC<\/em>\r\n<em>from webdriver_manager.chrome import ChromeDriverManager<\/em>\r\n\r\n<em># Configurations<\/em>\r\n<em>URL = \"https:\/\/echa.europa.eu\/news-and-events\/news-alerts\/archive-2025\"<\/em>\r\n<em>STATE_FILE = \"echa_news_state.json\"<\/em>\r\n<em>EMAIL_FROM = \"xxx@tothenew.com\"<\/em>\r\n<em>EMAIL_TO = \"xxx@tothenew.com\"<\/em>\r\n<em>EMAIL_PASS = \u201cccccc\"<\/em>\r\n<em>SMTP_SERVER = \"smtp.gmail.com\"<\/em>\r\n<em>SMTP_PORT = 587<\/em>\r\n\r\n<em>def get_latest_news_date():<\/em>\r\n<em>  \u00a0 url = \"https:\/\/echa.europa.eu\/news-and-events\/news-alerts\/archive-2025\"<\/em>\r\n<em>  \u00a0 scraper = cloudscraper.create_scraper() \u00a0<\/em>\r\n<em>  \u00a0 response = scraper.get(url)<\/em>\r\n<em>  \u00a0 response.raise_for_status()<\/em>\r\n<em>  \u00a0 soup = BeautifulSoup(response.text, \"html.parser\")<\/em>\r\n<em>  \u00a0 date_pattern = re.compile(r\"\\b\\d{1,2}\\s+\\w+\\s+2025\\b\")<\/em>\r\n<em>  \u00a0 match = date_pattern.search(soup.get_text(\" \", strip=True))<\/em>\r\n<em>  \u00a0 if match:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 return match.group()<\/em>\r\n<em>  \u00a0 else:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 return None\r\n<\/em>\r\n<em>def load_previous_state():<\/em>\r\n<em>  \u00a0 if os.path.exists(STATE_FILE):<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 with open(STATE_FILE, \"r\") as f:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return json.load(f)<\/em>\r\n<em>\u00a0 \u00a0 return {}<\/em>\r\n\r\n<em>def save_state(state):<\/em>\r\n<em>  \u00a0 with open(STATE_FILE, \"w\") as f:<\/em>\r\n<em>\u00a0 \u00a0 \u00a0 \u00a0 json.dump(state, f)<\/em>\r\n\r\n<em>def send_email(latest_date, previous_date):<\/em>\r\n<em>  \u00a0 subject = \"\ud83d\udce2 ECHA News Alert Updated\"<\/em>\r\n<em>  \u00a0 body = f\"\"\"<\/em>\r\n<em>Latest news date from ECHA Archive 2025: {latest_date}<\/em>\r\n<em>Previous recorded: {previous_date or 'None'}<\/em>\r\n<em>URL: {URL}<\/em>\r\n<em>\"\"\"<\/em>\r\n<em>  \u00a0 msg = MIMEText(body, \"plain\")<\/em>\r\n<em>  \u00a0 msg[\"From\"] = EMAIL_FROM<\/em>\r\n<em>  \u00a0 msg[\"To\"] = EMAIL_TO<\/em>\r\n<em>  \u00a0 msg[\"Subject\"] = subject<\/em>\r\n\r\n<em>  \u00a0 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 server.starttls()<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 server.login(EMAIL_FROM, EMAIL_PASS)<\/em>\r\n<em>\u00a0 \u00a0 \u00a0 \u00a0 server.send_message(msg)<\/em>\r\n\r\n<em>def main():<\/em>\r\n<em>  \u00a0 latest_date = get_latest_news_date()<\/em>\r\n<em>  \u00a0 if not latest_date:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 print(\"\u26a0\ufe0f Could not find a date on the page.\")<\/em>\r\n<em>\u00a0 \u00a0 \u00a0 \u00a0 return<\/em>\r\n\r\n<em>  \u00a0 state = load_previous_state()<\/em>\r\n<em>\u00a0 \u00a0 previous_date = state.get(\"latest_news_date\")<\/em>\r\n\r\n<em>  \u00a0 if latest_date != previous_date:<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 send_email(latest_date, previous_date)<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 state[\"latest_news_date\"] = latest_date<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 save_state(state)<\/em>\r\n<em>  \u00a0 \u00a0 \u00a0 print(f\"\u2705 Email sent. New date: {latest_date}\")<\/em>\r\n<em>  \u00a0 else:<\/em>\r\n<em>\u00a0 \u00a0 \u00a0 \u00a0 print(f\"No change. Latest date still: {latest_date}\")<\/em>\r\n\r\n<em>if __name__ == \"__main__\":<\/em>\r\n<em>\u00a0 \u00a0 main()<\/em><\/pre>\n<p>Then came the challenge: automation.<br \/>\nI explored multiple approaches &#8211; Windows Task Scheduler, Cron Jobs, even a few GitHub scripts. I ended up using Task Scheduler because I didn\u2019t have access to a cloud platform. The setup worked, but there was a catch &#8211; my system had to be on at the scheduled time.<br \/>\nStill, I was happy. I thought, \u201cAt least it works!\u201d<\/p>\n<p>I demoed it to my client, and he smiled &#8211; and then rejected the idea.<br \/>\nNot because it didn\u2019t work, but because the intended end-user wasn\u2019t technical. The client wanted someone with zero coding knowledge to handle this task.<\/p>\n<p>Then came the real turning point.<br \/>\nHe asked me, \u201cHave you explored Agentic AI?\u201d<\/p>\n<p>My first thought was, \u201cCome on, we can\u2019t do this using ChatGPT &#8211; how would we even schedule it?\u201d<br \/>\nBut curiosity got the better of me, and that\u2019s when my two-week coding project turned into a two-day discovery of what\u2019s possible today.<\/p>\n<h2><strong>What is Agentic AI, really?<\/strong><\/h2>\n<p>Agentic AI refers to AI systems that can take autonomous actions to achieve goals, not just answer questions.<br \/>\nUnlike traditional AI chatbots that stop at providing text responses, agentic systems can plan, reason, execute, and monitor workflows &#8211; almost like a digital assistant that doesn\u2019t just tell you what to do but actually does it.<\/p>\n<p>Think of them as a bridge between LLMs (like GPT-4\/5) and automation tools &#8211; they combine reasoning with execution. They can log into websites, extract information, perform checks, send alerts, or even trigger workflows without you having to write a line of code.<\/p>\n<p>In my case, instead of coding a scraper, an AI agent could watch a web page for me and email me when something changes. That\u2019s exactly what I found in Browse.ai.<\/p>\n<h3><strong>My hands-on with Browse.ai<\/strong><\/h3>\n<p>At first, I was skeptical &#8211; \u201cthere\u2019s no way this thing will actually detect a date change and send an email automatically.\u201d<br \/>\nBut once I started exploring, the simplicity was shocking.<\/p>\n<p>All I did was:<\/p>\n<ol>\n<li>Go to <a href=\"https:\/\/www.browse.ai\/\">Browse.ai<\/a><\/li>\n<li>Select the action you want to perform like Monitor Site Changes or Extract Structured Data from a website<\/li>\n<\/ol>\n<div id=\"attachment_77146\" style=\"width: 394px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77146\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-77146\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/1.png\" alt=\"image\" width=\"384\" height=\"343\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/1.png 937w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/1-300x268.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/1-768x687.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/1-624x558.png 624w\" sizes=\"(max-width: 384px) 100vw, 384px\" \/><\/a><p id=\"caption-attachment-77146\" class=\"wp-caption-text\">nn<\/p><\/div>\n<p>3. Select Monitor Site Changes and paste the website link (which requires monitoring),<\/p>\n<div id=\"attachment_77147\" style=\"width: 416px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77147\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77147\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/2.png\" alt=\"image\" width=\"406\" height=\"259\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/2.png 872w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/2-300x192.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/2-768x491.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/2-624x399.png 624w\" sizes=\"(max-width: 406px) 100vw, 406px\" \/><\/a><p id=\"caption-attachment-77147\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>4. Now once the web page uploads on screen, select either Text or capture screenshot to train the model<\/p>\n<div id=\"attachment_77148\" style=\"width: 423px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77148\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77148\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/3.png\" alt=\"image\" width=\"413\" height=\"209\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/3.png 1868w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/3-300x152.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/3-1024x519.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/3-768x389.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/3-1536x779.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/3-624x316.png 624w\" sizes=\"(max-width: 413px) 100vw, 413px\" \/><\/a><p id=\"caption-attachment-77148\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>5.Now Highlight the text (in my case date and List name)<\/p>\n<div id=\"attachment_77149\" style=\"width: 427px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77149\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77149\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/4.png\" alt=\"image\" width=\"417\" height=\"206\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/4.png 1828w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/4-300x148.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/4-1024x506.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/4-768x379.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/4-1536x759.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/4-624x308.png 624w\" sizes=\"(max-width: 417px) 100vw, 417px\" \/><\/a><p id=\"caption-attachment-77149\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>6.Now Name your Robot<\/p>\n<div id=\"attachment_77150\" style=\"width: 441px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77150\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77150\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/5.png\" alt=\"image\" width=\"431\" height=\"177\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/5.png 1160w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/5-300x123.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/5-1024x420.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/5-768x315.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/5-624x256.png 624w\" sizes=\"(max-width: 431px) 100vw, 431px\" \/><\/a><p id=\"caption-attachment-77150\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>7.Set a daily\/weekly or monthly schedule,<\/p>\n<div id=\"attachment_77151\" style=\"width: 449px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77151\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77151\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/6.png\" alt=\"image\" width=\"439\" height=\"270\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/6.png 1133w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/6-300x185.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/6-1024x630.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/6-768x472.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/6-624x384.png 624w\" sizes=\"(max-width: 439px) 100vw, 439px\" \/><\/a><p id=\"caption-attachment-77151\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>8.And choose email notification.<br \/>\nAlso, we can view all Trained Robots at home page for easy navigation<\/p>\n<div id=\"attachment_77152\" style=\"width: 451px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77152\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77152\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/7.png\" alt=\"image\" width=\"441\" height=\"262\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/7.png 1202w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/7-300x178.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/7-1024x607.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/7-768x456.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/7-624x370.png 624w\" sizes=\"(max-width: 441px) 100vw, 441px\" \/><\/a><p id=\"caption-attachment-77152\" class=\"wp-caption-text\">image<\/p><\/div>\n<p>That\u2019s it &#8211; no scripts, no tokens, no schedulers, nothing.<\/p>\n<h4>And then, a few days later, I got an email from Browse.ai: \u201cChange detected on the monitored page.\u201d<\/h4>\n<h3>How the actual Output Looks like:<\/h3>\n<div id=\"attachment_77153\" style=\"width: 472px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-77153\" decoding=\"async\" loading=\"lazy\" class=\" wp-image-77153\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/12\/8.png\" alt=\"Final Output\" width=\"462\" height=\"251\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/12\/8.png 1353w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/8-300x163.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/8-1024x556.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/8-768x417.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/12\/8-624x339.png 624w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/a><p id=\"caption-attachment-77153\" class=\"wp-caption-text\">Final Output<\/p><\/div>\n<p>That was my \u201cwow\u201d moment. What took me days to code, schedule, and secure could be done in less than 15 minutes.<\/p>\n<h3>About Browse.ai (Free vs Paid)<\/h3>\n<p>Browse.ai works on a credit (token) system.<\/p>\n<p>When you sign up, you get 50 free tokens, enough for testing 50 tasks (like 50 page runs or extractions).<br \/>\nEach run or monitoring cycle consumes a few tokens depending on what you\u2019re doing (a simple date extraction uses 1 token).<br \/>\nYou can schedule robots to run daily, weekly, or hourly &#8211; the frequency and number of monitored pages determine how fast you use your tokens.<\/p>\n<p><strong>\u00a0Free Plan:<\/strong><br \/>\n1. 50 free credits (tokens)<br \/>\n2. Basic data extraction<br \/>\n3. 1 monitoring robot<br \/>\n4. Manual and daily scheduling<\/p>\n<p><strong>Paid Plans (as of now):<\/strong><br \/>\n1. Start from around $39\/month<br \/>\n2. Include 2,000+ credits<br \/>\n3. Allow multiple robots, advanced scheduling, webhooks, and API access (so you can connect with Slack, Zapier, or Gmail).<\/p>\n<p>For most business cases, the free version is enough to test the workflow or set up a single monitor. Once you scale or need multiple pages tracked, you can move to the paid plan.<\/p>\n<h2><strong>What I learned<\/strong><\/h2>\n<p>Exploring Browse.ai and understanding Agentic AI made me realize how automation is evolving. It\u2019s not just about writing scripts anymore,\u00a0 it\u2019s about letting AI act for you.<br \/>\nAgentic systems like Browse.ai, Zapier\u2019s AI agents, or even OpenAI\u2019s upcoming \u201cProjects and Actions\u201d features represent a shift from prompting AI to delegating work to AI.<\/p>\n<p>So yes, the two weeks I spent coding were not wasted, they helped me appreciate the simplicity of these tools even more.<br \/>\nAnd now, if you ask me to set up a page-change alert for a non-technical client, I know exactly what to recommend.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The other day, my client asked for something that sounded simple at first &#8211; he wanted an alert in his inbox whenever the date changed on a specific website. And, of course, the first thought that came to my mind was: \u201cYes, that\u2019s doable with Python!\u201d Because that\u2019s what I have always done in my [&hellip;]<\/p>\n","protected":false},"author":1789,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":52},"categories":[5879],"tags":[4782],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/77155"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1789"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=77155"}],"version-history":[{"count":6,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/77155\/revisions"}],"predecessor-version":[{"id":77293,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/77155\/revisions\/77293"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=77155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=77155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=77155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}