<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: davidf]</title>
    <description>The latest articles on DEV Community by davidf] (@_adedfe4a3881544e2b7).</description>
    <link>https://dev.to/_adedfe4a3881544e2b7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079808%2Fe5d4f286-87b2-4789-8bf6-36d67d618fdf.png</url>
      <title>DEV Community: davidf]</title>
      <link>https://dev.to/_adedfe4a3881544e2b7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_adedfe4a3881544e2b7"/>
    <language>en</language>
    <item>
      <title># Building an Instagram OSINT Project on Fedora Linux</title>
      <dc:creator>davidf]</dc:creator>
      <pubDate>Sun, 16 Aug 2026 07:28:26 +0000</pubDate>
      <link>https://dev.to/_adedfe4a3881544e2b7/-building-an-instagram-osint-project-on-fedora-linux-hn2</link>
      <guid>https://dev.to/_adedfe4a3881544e2b7/-building-an-instagram-osint-project-on-fedora-linux-hn2</guid>
      <description>&lt;h1&gt;
  
  
  Building an Instagram OSINT Project on Fedora Linux
&lt;/h1&gt;

&lt;p&gt;I'm building an Instagram OSINT project on Fedora Linux using Python and Osintgram. The goal is to experiment with retrieving publicly available Instagram profile and post information while keeping the project organized as a local development environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Started Building It
&lt;/h2&gt;

&lt;p&gt;I wanted to experiment with how an OSINT tool could collect publicly available Instagram information and organize the results in a useful way.&lt;/p&gt;

&lt;p&gt;I started with Osintgram because it already provides a CLI-based foundation for Instagram OSINT. While setting it up, I ran into authentication problems with Instagram's direct login.&lt;/p&gt;

&lt;p&gt;The same credentials worked normally through Instagram, but the automated login returned a &lt;code&gt;bad_password&lt;/code&gt; response. That was harder than expected because I initially assumed the authentication behavior would be the same.&lt;/p&gt;

&lt;p&gt;That pushed me toward testing an API-based data layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing HikerAPI
&lt;/h2&gt;

&lt;p&gt;For the data source, I'm experimenting with &lt;a href="https://hikerapi.com" rel="noopener noreferrer"&gt;HikerAPI&lt;/a&gt;, a hosted REST API for Instagram data.&lt;/p&gt;

&lt;p&gt;The basic request I'm testing looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-access-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.hikerapi.com/v2/user/by/username?username=nasa&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.hikerapi.com/v2/user/stories?user_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pk&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The part I like about this approach is that the application can interact with a defined REST interface instead of having to handle all of the underlying data-collection logic itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardest Part So Far
&lt;/h2&gt;

&lt;p&gt;The hardest part has been authentication.&lt;/p&gt;

&lt;p&gt;I originally expected that because my Instagram credentials worked normally, Osintgram would be able to authenticate with them as well. That wasn't the case.&lt;/p&gt;

&lt;p&gt;It made me realize that authentication for an automated client can behave differently from authentication through the normal application.&lt;/p&gt;

&lt;p&gt;That experience is one of the reasons I'm separating the data-collection layer from the rest of the project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Where the Project Is Going
&lt;/h1&gt;

&lt;p&gt;I'm still building and testing the project, so I don't want to claim that I've already solved every reliability or data-collection problem.&lt;/p&gt;

&lt;p&gt;Right now I'm interested in keeping the project modular. Ideally, the rest of the application shouldn't need to care whether data comes from one API, another API, or another collection method.&lt;/p&gt;

&lt;p&gt;I'm also paying attention to things like request limits, error handling, and what happens when an API request fails.&lt;/p&gt;

&lt;p&gt;The goal isn't just to get one successful request. I want to understand how to build the surrounding application so it can handle the data-collection layer cleanly.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I'm Learning
&lt;/h1&gt;

&lt;p&gt;The biggest lesson so far is that the interesting part isn't necessarily making an API request.&lt;/p&gt;

&lt;p&gt;It's everything around it: authentication, errors, rate limits, organizing the returned data, and designing the application so one external dependency doesn't dictate the entire architecture.&lt;/p&gt;

&lt;p&gt;I'm still working on the project and testing different approaches.&lt;/p&gt;

&lt;p&gt;If you've built an OSINT or web-data project before, how would you structure the data-collection layer?&lt;/p&gt;

&lt;p&gt;Tags&lt;/p&gt;

&lt;p&gt;python api showdev&lt;/p&gt;

</description>
      <category>cli</category>
      <category>linux</category>
      <category>python</category>
      <category>security</category>
    </item>
  </channel>
</rss>
