Ask HN: How do I easily catalog a couple thousand physical books?
Buy a cheap hand held battery operated wireless barcode scanner (cheap on AliExpress). These work really well for scanning stacks of books... pick the book up, zap, put the book down. You have to config the scanner to operate in &quot;keyboard&quot; mode or some such... basically what you scan gets typed as if from a keyboard.<p>I used a simple Excel macro for data capture and lookup. Basically when a cell changed (book was scanned) it would request the book data from outpan.com. If outpan didn&#x27;t know the upc beep and return to the cell, otherwise decode the response (json) and populate the spreadsheet row.<p>Here&#x27;s the excel macro (why I used the B column instead of the A column is a longer story):<p><pre><code>    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Cells.Count &lt;&gt; 1 Then
            Exit Sub
        End If
        
        If Application.Intersect(Range(&quot;B2:B99999&quot;), Range(Target.Address)) Is Nothing Then
            Exit Sub
        End If
        
        Dim Ean
        Ean = CStr(Target.value)
        
        Dim Url
        Url = &quot;https:&#x2F;&#x2F;api.outpan.com&#x2F;v2&#x2F;products&#x2F;&quot; + Ean + &quot;?apikey=[haha get your own key haha]&quot;
    
        Dim HttpRequest
        Set HttpRequest = CreateObject(&quot;MSXML2.XMLHTTP&quot;)
        HttpRequest.Open &quot;GET&quot;, Url, False
        HttpRequest.Send
            
        Set json = New VbsJson
        Set o = json.Decode(HttpRequest.ResponseText)
        If Not IsEmpty(o(&quot;error&quot;)) Then
            Beep
            ActiveCell.Offset(-1, 0).Select
        Else
            booktitle = o(&quot;name&quot;)
            If IsNull(booktitle) Then
                Beep
                ActiveCell.Offset(-1, 0).Select
            Else
                If IsVarArrayEmpty(o(&quot;attributes&quot;)) Then
                    Author = &quot;&quot;
                    PublishedOn = &quot;&quot;
                Else
                    If IsEmpty(o(&quot;attributes&quot;)(&quot;Author(s)&quot;)) Then
                        Author = &quot;&quot;
                    Else
                        Author = o(&quot;attributes&quot;)(&quot;Author(s)&quot;)
                    End If
                    If IsEmpty(o(&quot;attributes&quot;)(&quot;Publication Date&quot;)) Then
                        PublishedOn = &quot;&quot;
                    Else
                        PublishedOn = o(&quot;attributes&quot;)(&quot;Publication Date&quot;)
                    End If
                End If
                
                Cells(Target.Row, Target.Column - 1).value = Cells(Target.Row - 1, Target.Column - 1).value
                Cells(Target.Row, Target.Column + 1).value = booktitle
                Cells(Target.Row, Target.Column + 2).value = Author
                Cells(Target.Row, Target.Column + 3).value = PublishedOn
            End If
        End If
    End Sub
    
    
    Function IsVarArrayEmpty(anArray As Variant)
        Dim i As Integer
        If IsObject(anArray) Then
            IsVarArrayEmpty = False
        Else
            On Error Resume Next
            i = UBound(anArray, 1)
            If Err.Number = 0 Then
                If i &lt; 0 Then
                    IsVarArrayEmpty = True
                Else
                    IsVarArrayEmpty = False
                End If
            Else
                IsVarArrayEmpty = True
            End If
        End If
    End Function

</code></pre>
edit: you will need VbsJson from <a href="http:&#x2F;&#x2F;demon.tw&#x2F;my-work&#x2F;vbs-json.html" rel="nofollow">http:&#x2F;&#x2F;demon.tw&#x2F;my-work&#x2F;vbs-json.html</a> (why that&#x27;s a chinese page I don&#x27;t know all I know was it was a single file json parser that was easy to work with for this).<p>edit2: I used this solution to scan and log 750 books in a couple of hours? Maybe 3? It went pretty quick.